如何减少代码重复“inherit_data”
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.3,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
如何减少代码重复“inherit_data”
2.3
这inherit_data
选项是在Symfony 2.3中引入的。ob娱乐下载之前,它被称为虚拟
。
的inherit_data
表单字段的选择可以是非常有用的,当你有一些重复的字段在不同的实体。例如,假设您有两个实体,一个公司
和一个客户
:
1 2 3 4 5 6 7 8 9 10 11 12 13
/ / src / AppBundle /实体/ Company.php名称空间AppBundle\实体;类公司{私人美元的名字;私人美元网站;私人美元地址;私人美元zipcode;私人美元城市;私人美元国家;}
1 2 3 4 5 6 7 8 9 10 11 12 13
/ / src / AppBundle /实体/ Customer.php名称空间AppBundle\实体;类客户{私人美元firstName;私人美元姓;私人美元地址;私人美元zipcode;私人美元城市;私人美元国家;}
正如你所看到的,每个实体的股票的一些相同的字段:地址
,zipcode
,城市
,国家
。
开始为这些实体与构建两种形式,CompanyType
和CustomerType
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ / src / AppBundle / /类型/ CompanyType.php形式名称空间AppBundle\形式\类型;使用ob娱乐下载\组件\形式\AbstractType;使用ob娱乐下载\组件\形式\FormBuilderInterface;类CompanyType扩展AbstractType{公共函数buildForm(FormBuilderInterface美元构建器数组,美元选项){美元构建器- >add (“名字”,“文本”)- >add (“网站”,“文本”);}}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ / src / AppBundle / /类型/ CustomerType.php形式名称空间AppBundle\形式\类型;使用ob娱乐下载\组件\形式\FormBuilderInterface;使用ob娱乐下载\组件\形式\AbstractType;类CustomerType扩展AbstractType{公共函数buildForm(FormBuilderInterface美元构建器数组,美元选项){美元构建器- >add (“firstName”,“文本”)- >add (“姓”,“文本”);}}
而不是包括重复字段地址
,zipcode
,城市
和国家
在这两种形式,创建一个名为第三形式LocationType
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30
/ / src / AppBundle / /类型/ LocationType.php形式名称空间AppBundle\形式\类型;使用ob娱乐下载\组件\形式\AbstractType;使用ob娱乐下载\组件\形式\FormBuilderInterface;使用ob娱乐下载\组件\OptionsResolver\OptionsResolverInterface;类LocationType扩展AbstractType{公共函数buildForm(FormBuilderInterface美元构建器数组,美元选项){美元构建器- >add (“地址”,“文本区域”)- >add (“zipcode”,“文本”)- >add (“城市”,“文本”)- >add (“国家”,“文本”);}公共函数setDefaultOptions(OptionsResolverInterface美元解析器){美元解析器- >setDefaults (数组(“inherit_data”= >真正的));}公共函数getName(){返回“位置”;}}
位置形成有一个有趣的选项,即inherit_data
。这个选项允许继承父窗体的数据形式。如果嵌入式的公司形式,位置形式将访问的字段的属性公司
实例。如果嵌入到客户的形式,将访问的属性的字段客户
实例。很容易,不是吗?
请注意
而不是设置inherit_data
选项里面LocationType
,您还可以(就像任何选项)的第三个参数$建设者- > add ()
。
最后,使这项工作通过添加位置形成两个原始形式:
1 2 3 4 5 6 7 8 9
/ / src / AppBundle / /类型/ CompanyType.php形式公共函数buildForm(FormBuilderInterface美元构建器数组,美元选项){/ /……美元构建器- >add (“foo”,新LocationType (),数组(“data_class”= >“AppBundle \实体\公司”));}
1 2 3 4 5 6 7 8 9
/ / src / AppBundle / /类型/ CustomerType.php形式公共函数buildForm(FormBuilderInterface美元构建器数组,美元选项){/ /……美元构建器- >add (“酒吧”,新LocationType (),数组(“data_class”= >“实体AppBundle \ \客户”));}
就是这样!你有重复的字段定义中提取到一个单独的位置,您可以重用无论你需要它。
谨慎
形式与inherit_data
选项设置不能有* _SET_DATA
事件监听器。
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。