0

我有两个实体:用户和个人。用户是一个人,在用户实体中我有一个方法 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 "Symfony\Component\Form\FormView" does not exist in SciForumVersion2Bundle:User:changeProfile.html.twig at line 54 
4

2 回答 2

1

如果你想在 User 表单中显示 Person 表单,你应该查看symfony 文档中的Embedded Forms章节。

如果您只想显示一个人表单,您的代码应该通过删除“人”来工作。部分来自字段名称,如下所示:

$builder->add('firstname', 'text', array('required'=>true));
$builder->add('lastname', 'text', array('required'=>true));
$builder->add('address1', 'text', array('label'=>'Address', 'required'=>true));
于 2012-10-16T14:20:54.307 回答
0

我设法解决了这个问题。我所做的是创建了一个名为 PersonUserEntity 的额外实体。在那里,我有我需要的所有变量:

degree
firstname
lastname
address1
...ETC...

然后我将这个实体用于表单。

提交表单后,我将从该实体获取信息并分别填充 Person 和 User 实体。

之后,我正在使用:

$em->persist($person);
$em->flush();

$em->persist($user);
$em->flush();
于 2012-10-18T10:10:22.777 回答