私には2つのエンティティがUser
あり、Member
にはUser
、関連付けられている通常のもの (ユーザー名、パスワード、電子メール) がすべて含まれています。
には、、などMember
の他のフィールドがあります。First Name
Last Name
Age
新しいフォームを作成して、フィールドとフィールドのMember
両方を含むフォームを表示しようとしています。User
Member
私は現在、次のものを持っています:
ユーザー.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');
}
}