Vic*_*sky 4 php symfony-forms symfony doctrine-orm
我想在一种形式中使用来自少数实体的字段,我可以这样做吗?例如,我想surname从ProfileType类型和name字段中添加一个表单字段CountryType.这个字段必须是一个简单的字符串(text).
我该怎么做?谢谢!
注意:我不能使用实体类型,因为Symfony只提供复选框,单选按钮并选择它,但是我需要使用一个简单的文本字段.
要在表单中包含相关实体的字段,请为每个相关实体嵌入自定义表单类型.从理论上讲,可以在单个表单中显示和更新具有多个关系的复杂实体的所有数据.在实践中,为多个关系执行此操作可能会变得复杂,但对于一个关系来说却很简单.请参阅嵌入表单:在Symfony Forms文档中嵌入单个对象.
例如,在主实体的表单类型中:
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,
));
}
Run Code Online (Sandbox Code Playgroud)
然后在你的树枝上你可以添加你需要的字段,如下所示:
{{ form_widget(form.profile.surname) }}
{{ form_widget(form.country.name) }}
Run Code Online (Sandbox Code Playgroud)
假设您的ProfileType和CountryType在其表单中添加了其他字段,那么如果您在twig中使用"form_rest(form)",您将获得其他您不想要的字段,或者如果您不使用form_rest,则根据哪个symfony版本你正在使用你可能会得到错误.处理这个问题的方法不止一种.
我有时使用'form_widget(_token)'代替'form_rest(form)'来解决这个问题.但是,我不知道你是否可以依靠这种继续工作.您可以将"form_rest(form)"包装在隐藏的div中,因为它通常仅用于添加隐藏的"_token"字段,在这种情况下,您不希望看到其他"个人档案"和"国家/地区"字段.在这种情况下,隐藏的实体值仍然映射到表单并返回,具有任何相应的开销,但是值不能更改.
或者,您可以为"个人档案"和"国家/地区"实体提供多种表单类型,并使用相应的表单类型作为上下 我不知道你的表单是什么,但是,例如,你可能有EditThingProfileType和EditThingCountryType用于上面的buildForm()方法,每个只添加你在表单上需要的单个字段.
| 归档时间: |
|
| 查看次数: |
5819 次 |
| 最近记录: |