0

私には2つのエンティティがUserあり、Member

にはUser、関連付けられている通常のもの (ユーザー名、パスワード、電子メール) がすべて含まれています。

には、、などMemberの他のフィールドがあります。First NameLast NameAge

新しいフォームを作成して、フィールドとフィールドのMember両方を含むフォームを表示しようとしています。UserMember

私は現在、次のものを持っています:

ユーザー.php

$protected $username;
$protected $email;


/**
* @ORM\OneToMany(targetEntity="BM\UserBundle\Entity\Member", mappedBy="user")
*/
protected $member;

Member.php

 /**
 * @ORM\ManyToOne(targetEntity="BM\UserBundle\Entity\User", inversedBy="member")
 */
 protected $user;

私も2つのフォームタイプを持っています:

MemberType.php

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('user', new UserType())
        ->add('firstname')
        ->add('lastname')
        ->add('age')
    ;
}

public function getDefaultOptions(array $options)
{
    return array(
        'data_class' => 'BM\UserBundle\Entity\User'
    );
}

UserType.php

public function buildForm(FormBuilderInterface $builder, array $options)
{

    $builder
        ->add('username')
        ->add('email')
        ->add('password')
    ;
}


public function getName()
{
    return 'user';
}

フォームがレンダリングされているページを更新すると、次のエラーが表示されます。

キャッチ可能な致命的なエラー: BM\UserBundle\Entity\Member::setUser() に渡される引数 1 は、BM\UserBundle\Entity\User のインスタンスでなければなりません。指定された配列は、/var/www/proj/vendor/symfony/symfony で呼び出されます/src/Symfony/Component/PropertyAccess/PropertyAccessor.php の 345 行目および /var/www/proj/src/BM/UserBundle/Entity/Member.php の 259 行目で定義

259行目は次のとおりです。

public function setUser(\BM\UserBundle\Entity\User $user = null)

私はこれに正しい方法で取り組んでいますか?

編集:

MemberController.php

$member = new Member();
    $form = $this->createForm(new MemberType(), $member);

    if($request->isMethod('post')) {
        $form->submit($request);
        if ($form->isValid()) {

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

            $request->getSession()->getFlashBag()->add('success', 'Member has been saved');
        } else {
             $request->getSession()->getFlashBag()->add('error', 'Could not save the member');
        }

    }
4

1 に答える 1

0

このようにしてみてください

public function buildForm(FormBuilderInterface $builder, array $options)
{

    $builder
        ->add('user', new UserType())
        ->add('firstname')
        ->add('lastname')
        ->add('age')
    ;
}

public function setDefaultOptions(array $options)
{
    return array(
        'data_class' => 'BM\UserBundle\Entity\Member'
    );
}


# UserType.php #

public function buildForm(FormBuilderInterface $builder, array $options)
{

    $builder
        ->add('username')
        ->add('email')
        ->add('password')
    ;
}

public function setDefaultOptions(array $options)
{
    return array(
        'data_class' => 'BM\UserBundle\Entity\User'
    );
}

ドキュメントを見てみましょう: http://symfony.com/doc/current/cookbook/form/form_collections.html

于 2013-09-20T11:42:52.323 に答える