>我有两个实体:用户和人。用户是一个人,在用户实体中,我有一个方法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....
在树枝文件中,我必须使用
<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 "SymfonyComponentFormFormView" does not exist in SciForumVersion2Bundle:User:changeProfile.html.twig at line 54
如果你想在用户表单中显示一个Person表单,你应该看看symfony文档中的嵌入式表单章节。
如果您只想显示 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));
我设法解决了这个问题。我所做的是我创建了一个额外的实体,称为PersonUserEntity。在那里,我有我需要的所有变量:
degree
firstname
lastname
address1
...ETC...
然后我将此实体用于表单。
提交表单后,我将从该实体获取信息,并分别填充"个人"和"用户"实体。
之后,我正在使用:
$em->persist($person);
$em->flush();
$em->persist($user);
$em->flush();