0

User と Person の 2 つのエンティティがあります。ユーザーは人であり、User エンティティにはメソッド 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

ユーザー フォーム内にユーザー フォームを表示したい場合は、symfony doc の埋め込みフォームの章を参照してください。

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));
于 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 に答える