如何使用"inherit_data"减少代码重复
编辑本页如何使用"inherit_data"减少代码重复
的inherit_data
当您在不同的实体中有一些重复的字段时,表单字段选项可能非常有用。例如,假设你有两个实体,a公司
和一个客户
:
12 3 4 5 6 7 8 9 10 11 12 13
/ / src /实体/ Company.php名称空间应用程序\实体;类公司{私人$的名字;私人$网站;私人$地址;私人$zipcode;私人$城市;私人$国家;}
12 3 4 5 6 7 8 9 10 11 12 13
/ / src /实体/ Customer.php名称空间应用程序\实体;类客户{私人$firstName;私人$姓;私人$地址;私人$zipcode;私人$城市;私人$国家;}
正如你所看到的,每个实体共享一些相同的字段:地址
,zipcode
,城市
,国家
.
首先为这些实体构建两个表单,CompanyType
而且CustomerType
:
12 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::类);}}
12 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
:
12 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 ()
.
最后,通过将location表单添加到您的两个原始表单中来实现此工作:
12 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”= >公司::类,]);}}
12 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
事件监听器。
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。