我正在尝试创建一个具有继承属性的表单类型,我有一个实体(Candidate),它有两个属性(String dni和User user)。
是否可以将用户(user.username)中的属性添加到候选表单中? 我想要这样的东西:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('dni', null, array_merge(array(
'label' => 'form.dni',
'translation_domain' => 'DroidersCandidateBundle',
), $this->mergeOptions))
->add('username', null, array_merge(array(
'label' => 'form.username',
'translation_domain' => 'SonataUserBundle'
), $this->mergeOptions))
;
}
答案 0 :(得分:0)
这种情况下的问题是绑定到表单的Entity
没有属性username
。这是它的财产user
。
因此,您需要告诉Form
如何访问正确的属性。这是通过使用property_path
选项实现的。 Here是它的文档。
您可以在过滤器的类型中执行类似的操作:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('dni', null, array_merge(array(
'label' => 'form.dni',
'translation_domain' => 'DroidersCandidateBundle',
), $this->mergeOptions))
->add('username', null, array_merge(array(
'label' => 'form.username',
'property_path' => 'user.username',
'translation_domain' => 'SonataUserBundle'
), $this->mergeOptions))
;
}
property_path
选项非常强大。它将接受PropertyAccess
组件所执行的任何路径。阅读其文档here。