如何减少代码重复“inherit_data”

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 5.3,不再维护。

这个页面的更新版本Symfob娱乐下载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名称空间应用程序\形式\类型;使用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许可证。
ob娱乐下载Symfony 5.3支持通过JoliCode