Symfony2表单:从另一个实体调用方法

时间:2012-10-16 14:02:56

标签: forms symfony symfony-forms

我有两个实体:用户和人。用户是一个人,在用户实体中我有一个方法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 

2 个答案:

答案 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();