如何减少代码重复“inherit_data”
编辑该页面如何减少代码重复“inherit_data”
的inherit_data
表单字段的选择可以是非常有用的,当你有一些重复的字段在不同的实体。例如,假设您有两个实体,一个公司
和一个客户
:
1 2 3 4 5 6 7 8 9 10 11 12 13
/ / src /实体/ Company.php名称空间应用程序\实体;类公司{私人美元的名字;私人美元网站;私人美元地址;私人美元zipcode;私人美元城市;私人美元国家;}
1 2 3 4 5 6 7 8 9 10 11 12 13
/ / src /实体/ Customer.php名称空间应用程序\实体;类客户{私人美元firstName;私人美元姓;私人美元地址;私人美元zipcode;私人美元城市;私人美元国家;}
正如你所看到的,每个实体的股票的一些相同的字段:地址
,zipcode
,城市
,国家
。
开始为这些实体与构建两种形式,CompanyType
和CustomerType
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ / src /形式/类型/ CompanyType.php名称空间应用程序\形式\类型;使用ob娱乐下载\组件\形式\AbstractType;使用ob娱乐下载\组件\形式\扩展\核心\类型\TextType;使用ob娱乐下载\组件\形式\FormBuilderInterface;类CompanyType扩展AbstractType{公共函数buildForm(FormBuilderInterface美元构建器数组,美元选项):无效{美元构建器- >add (“名字”,TextType::类)- >add (“网站”,TextType::类);}}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ / src /形式/类型/ CustomerType.php名称空间应用程序\形式\类型;使用ob娱乐下载\组件\形式\AbstractType;使用ob娱乐下载\组件\形式\扩展\核心\类型\TextType;使用ob娱乐下载\组件\形式\FormBuilderInterface;类CustomerType扩展AbstractType{公共函数buildForm(FormBuilderInterface美元构建器数组,美元选项):无效{美元构建器- >add (“firstName”,TextType::类)- >add (“姓”,TextType::类);}}
而不是包括重复字段地址
,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
/ / src /形式/类型/ LocationType.php名称空间应用程序\形式\类型;使用ob娱乐下载\组件\形式\AbstractType;使用ob娱乐下载\组件\形式\扩展\核心\类型\TextareaType;使用ob娱乐下载\组件\形式\扩展\核心\类型\TextType;使用ob娱乐下载\组件\形式\FormBuilderInterface;使用ob娱乐下载\组件\OptionsResolver\OptionsResolver;类LocationType扩展AbstractType{公共函数buildForm(FormBuilderInterface美元构建器数组,美元选项):无效{美元构建器- >add (“地址”,TextareaType::类)- >add (“zipcode”,TextType::类)- >add (“城市”,TextType::类)- >add (“国家”,TextType::类);}公共函数configureOptions(OptionsResolver美元解析器):无效{美元解析器- >setDefaults ([“inherit_data”= >真正的]);}}
位置形成有一个有趣的选项,即inherit_data
。这个选项允许继承父窗体的数据形式。如果嵌入式的公司形式,位置形式将访问的字段的属性公司
实例。如果嵌入到客户的形式,将访问的属性的字段客户
实例。方便的,是吗?
请注意
而不是设置inherit_data
选项里面LocationType
,您还可以(就像任何选项)的第三个参数$建设者- > add ()
。
最后,使这项工作通过添加位置形成两个原始形式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ / src /形式/类型/ CompanyType.php名称空间应用程序\形式\类型;使用应用程序\实体\公司;使用ob娱乐下载\组件\形式\AbstractType;/ /……类CompanyType扩展AbstractType{公共函数buildForm(FormBuilderInterface美元构建器数组,美元选项):无效{/ /……美元构建器- >add (“foo”,LocationType::类,“data_class”= >公司::类,]);}}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/ / src /形式/类型/ CustomerType.php名称空间应用程序\形式\类型;使用应用程序\实体\客户;使用ob娱乐下载\组件\形式\AbstractType;类CustomerType扩展AbstractType{公共函数buildForm(FormBuilderInterface美元构建器数组,美元选项):无效{/ /……美元构建器- >add (“酒吧”,LocationType::类,“data_class”= >客户::类,]);}}
就是这样!你有重复的字段定义中提取到一个单独的位置,您可以重用无论你需要它。
谨慎
形式与inherit_data
选项设置不能有* _SET_DATA
事件监听器。
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。