我有两个实体:用户和人。用户是一个人,在用户实体中我有一个方法getPerson()。
现在我正在尝试创建表单以更改用户个人资料。 在那里,我想创建:
$builder->add('degree', 'entity', array(
'class' => 'SciForumVersion2Bundle:Degree',
'property' => 'degree',
));
$builder->add('person.firstname', 'text', array('required'=>true));
$builder->add('person.lastname', 'text', array('required'=>true));
$builder->add('person.address1', 'text', array('label'=>'Address', 'required'=>true));
ETC....
在twig文件中,我必须使用
<tr>
<td>
{{ form_label(form.degree) }}
</td>
<td>
{{ form_widget(form.degree) }}
</td>
</tr>
<tr>
<td>
{{ form_label(form.firstname) }}
</td>
<td>
{{ form_widget(form.firstname, { 'attr': {'size': 30} }) }}
</td>
</tr>
<tr>
<td>
{{ form_label(form.lastname) }}
</td>
<td>
{{ form_widget(form.lastname, { 'attr': {'size': 30} }) }}
</td>
ETC....
但是对于
form.firstname
form.firstname
我正在考虑例外:
Method "firstname" for object "Symfony\Component\Form\FormView" does not exist in SciForumVersion2Bundle:User:changeProfile.html.twig at line 54
答案 0 :(得分:1)
如果您想在用户表单中显示个人表单,您应该查看symfony doc中的Embedded Forms章节。
如果您只想显示一个Person表单,那么您的代码应该通过删除“person”来工作。部分来自字段名称,如下所示:
$builder->add('firstname', 'text', array('required'=>true));
$builder->add('lastname', 'text', array('required'=>true));
$builder->add('address1', 'text', array('label'=>'Address', 'required'=>true));
答案 1 :(得分:0)
我设法解决了这个问题。我做的是创建了一个名为PersonUserEntity的额外实体。在那里,我有我需要的所有变量:
degree
firstname
lastname
address1
...ETC...
然后我将此实体用于表单。
表单提交后,我将从此实体获取信息并逐字填充Person和User实体。
之后,我正在使用:
$em->persist($person);
$em->flush();
$em->persist($user);
$em->flush();