如何减少代码重复“inherit_data”

编辑该页面

警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 4.2,不再维护。

这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

如何减少代码重复“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,城市,国家

开始为这些实体与构建两种形式,CompanyTypeCustomerType:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ / src /形式/类型/ CompanyType.php名称空间应用程序\形式\类型;使用欧宝娱乐app下载地址\组件\形式\AbstractType;使用欧宝娱乐app下载地址\组件\形式\扩展\核心\类型\TextType;使用欧宝娱乐app下载地址\组件\形式\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名称空间应用程序\形式\类型;使用欧宝娱乐app下载地址\组件\形式\AbstractType;使用欧宝娱乐app下载地址\组件\形式\扩展\核心\类型\TextType;使用欧宝娱乐app下载地址\组件\形式\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名称空间应用程序\形式\类型;使用欧宝娱乐app下载地址\组件\形式\AbstractType;使用欧宝娱乐app下载地址\组件\形式\扩展\核心\类型\TextareaType;使用欧宝娱乐app下载地址\组件\形式\扩展\核心\类型\TextType;使用欧宝娱乐app下载地址\组件\形式\FormBuilderInterface;使用欧宝娱乐app下载地址\组件\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
/ / src /形式/类型/ CompanyType.php使用应用程序\实体\公司;/ /……公共函数buildForm(FormBuilderInterface美元构建器数组,美元选项){/ /……美元构建器- >add (“foo”,LocationType::类,“data_class”= >公司::类,]);}
1 2 3 4 5 6 7 8 9 10 11 12
/ / src /形式/类型/ CustomerType.php使用应用程序\实体\客户;/ /……公共函数buildForm(FormBuilderInterface美元构建器数组,美元选项){/ /……美元构建器- >add (“酒吧”,LocationType::类,“data_class”= >客户::类,]);}

就是这样!你有重复的字段定义中提取到一个单独的位置,您可以重用无论你需要它。

谨慎

形式与inherit_data选项设置不能有* _SET_DATA事件监听器。

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。