php – 如何在实体表单中包含从另一个实体中键入一些字段?
我想在一种形式中使用来自少数实体的字段,我可以这样做吗?例如,我想从CountryType类型中添加一个表单姓氏字段,从CountryType添加名称字段.此字段必须是简单的字符串(文本).
我该怎么做?谢谢! 注意:我不能使用entity类型,因为Symfony只提供复选框,单选按钮并选择它,但是我需要使用一个简单的文本字段. 解决方法
要在表单中包含相关实体的字段,请为每个相关实体嵌入自定义表单类型.从理论上讲,可以在单个表单中显示和更新具有多个关系的复杂实体的所有数据.在实践中,为多个关系执行此操作可能会变得复杂,但对于一个关系来说却很简单.请参阅Symfony Forms文档中的
Embedded Forms: Embedding a single object.
例如,在主实体的表单类型中: public function buildForm(FormBuilderInterface $builder,array $options) { ... $builder->add('profile',new ProfileType()); $builder->add('country',new CountryType()); ... } public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( ...,'cascade_validation' => true,)); } 然后在你的树枝上你可以添加你需要的字段,如下所示: {{ form_widget(form.profile.surname) }} {{ form_widget(form.country.name) }} 假设您的ProfileType和CountryType在其表单中添加了其他字段,那么如果您在twig中使用“form_rest(form)”,您将获得其他您不想要的字段,或者如果您不使用form_rest,则根据哪个symfony版本你正在使用你可能会得到错误.处理这个问题的方法不止一种. 我有时使用’form_widget(_token)’代替’form_rest(form)’来解决这个问题.但是我不知道你是否可以依赖这个继续工作.您可以将“form_rest(form)”包装在隐藏的div中,因为它通常仅用于添加隐藏的“_token”字段,在这种情况下,您不希望看到其他“个人档案”和“国家/地区”字段.在这种情况下,隐藏的实体值仍然映射到表单并返回,具有任何相应的开销,但是值不能更改. 或者,您可以为“个人档案”和“国家/地区”实体提供多种表单类型,并使用相应的表单类型作为上下我不知道你的表单是什么,但是,例如,你可能有EditThingProfileType和EditThingCountryType用于上面的buildForm()方法,每个只添加你在表单上需要的单个字段. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |