如何使用虚拟表单字段选择吗
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.1,不再维护。
考虑升级你的Symfony项目6.2。ob娱乐下载
如何使用虚拟表单字段选择吗
的虚拟
表单字段的选择可以是非常有用的,当你有一些重复的字段在不同的实体。
例如,假设您有两个实体,一个公司
和一个客户
:
1 2 3 4 5 6 7 8 9 10 11 12 13
/ / src / Acme / / Company.php HelloBundle /实体名称空间Acme\HelloBundle\实体;类公司{私人美元的名字;私人美元网站;私人美元地址;私人美元zipcode;私人美元城市;私人美元国家;}
1 2 3 4 5 6 7 8 9 10 11 12 13
/ / src / Acme / / Customer.php HelloBundle /实体名称空间Acme\HelloBundle\实体;类客户{私人美元firstName;私人美元姓;私人美元地址;私人美元zipcode;私人美元城市;私人美元国家;}
就像你所看到的,每个实体的股票的一些相同的字段:地址
,zipcode
,城市
,国家
。
现在,你想建立两种形式:一个公司
和第二个客户
。
首先创建一个非常简单的CompanyType
和CustomerType
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/ / src / Acme / HelloBundle /形式/类型/ CompanyType.php名称空间Acme\HelloBundle\形式\类型;使用ob娱乐下载\组件\形式\AbstractType;使用ob娱乐下载\组件\形式\FormBuilder;使用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 / Acme / HelloBundle /形式/类型/ CustomerType.php名称空间Acme\HelloBundle\形式\类型;使用ob娱乐下载\组件\形式\FormBuilderInterface;使用ob娱乐下载\组件\形式\AbstractType;类CustomerType扩展AbstractType{公共函数buildForm(FormBuilderInterface美元构建器数组,美元选项){美元构建器- >add (“firstName”,“文本”)- >add (“姓”,“文本”);}}
现在,处理4个重复的字段。这是一个(简单的)位置形式类型:
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 / Acme / HelloBundle /形式/类型/ LocationType.php名称空间Acme\HelloBundle\形式\类型;使用ob娱乐下载\组件\形式\AbstractType;使用ob娱乐下载\组件\形式\FormBuilderInterface;使用ob娱乐下载\组件\OptionsResolver\OptionsResolverInterface;类LocationType扩展AbstractType{公共函数buildForm(FormBuilderInterface美元构建器数组,美元选项){美元构建器- >add (“地址”,“文本区域”)- >add (“zipcode”,“文本”)- >add (“城市”,“文本”)- >add (“国家”,“文本”);}公共函数setDefaultOptions(OptionsResolverInterface美元解析器){美元解析器- >setDefaults (数组(“虚拟”= >真正的));}公共函数getName(){返回“位置”;}}
你不实际上每个实体的位置字段,所以你不能直接链接LocationType
来CompanyType
或CustomerType
。但你绝对要有一个专门的形式类型来处理位置(记住,干!)。
的虚拟
表单字段选择是解决方案。
你可以设置选项“虚拟”= >正确的
在setDefaultOptions ()
的方法LocationType
直接开始使用它在两个原始形式类型。
查看结果:
1 2 3 4 5 6 7
/ / CompanyType公共函数buildForm(FormBuilderInterface美元构建器数组,美元选项){美元构建器- >add (“foo”,新LocationType (),数组(“data_class”= >“Acme \ HelloBundle \ \公司实体”));}
1 2 3 4 5 6 7
/ / CustomerType公共函数buildForm(FormBuilderInterface美元构建器数组,美元选项){美元构建器- >add (“酒吧”,新LocationType (),数组(“data_class”= >“Acme \ HelloBundle \实体\客户”));}
虚拟选项设置为false(默认行为),表单组件预计每个潜在的对象有一个喷火
(或酒吧
)属性,要么是一些对象或数组包含四个位置字段。当然,你没有这个对象/数组实体和你不想要它!
虚拟选项设置为true,表单组件跳过了喷火
(或酒吧
)的财产,而不是“得到”和“集”4位置字段直接在底层对象!
请注意
而不是设置虚拟
选项里面LocationType
,你可以(就像任何选项)也通过它作为数组的第三个参数的选项$建设者- > add ()
。
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。