Symfony 保存/嵌入关联的表单类型

Symfony 保存/嵌入关联的表单类型,symfony,symfony-forms,Symfony,Symfony Forms,我有两个实体用户和成员 用户拥有所有相关的正常内容(用户名、密码、电子邮件) 成员还有一些其他字段,包括,名字,姓氏,年龄等 我正在尝试创建一个新的成员,并显示一个包含用户字段和成员字段的表单 我目前有以下情况: User.php $protected $username; $protected $email; /** * @ORM\OneToMany(targetEntity="BM\UserBundle\Entity\Member", mappedBy="user") */ protec

我有两个实体
用户
成员

用户
拥有所有相关的正常内容(用户名、密码、电子邮件)

成员
还有一些其他字段,包括,
名字
姓氏
年龄

我正在尝试创建一个新的
成员
,并显示一个包含
用户
字段和
成员
字段的表单

我目前有以下情况:

User.php

$protected $username;
$protected $email;


/**
* @ORM\OneToMany(targetEntity="BM\UserBundle\Entity\Member", mappedBy="user")
*/
protected $member;
 /**
 * @ORM\ManyToOne(targetEntity="BM\UserBundle\Entity\User", inversedBy="member")
 */
 protected $user;
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'
    );
}
public function buildForm(FormBuilderInterface $builder, array $options)
{

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


public function getName()
{
    return 'user';
}
Member.php

$protected $username;
$protected $email;


/**
* @ORM\OneToMany(targetEntity="BM\UserBundle\Entity\Member", mappedBy="user")
*/
protected $member;
 /**
 * @ORM\ManyToOne(targetEntity="BM\UserBundle\Entity\User", inversedBy="member")
 */
 protected $user;
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'
    );
}
public function buildForm(FormBuilderInterface $builder, array $options)
{

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


public function getName()
{
    return 'user';
}
我还有两种表单类型:

MemberType.php

$protected $username;
$protected $email;


/**
* @ORM\OneToMany(targetEntity="BM\UserBundle\Entity\Member", mappedBy="user")
*/
protected $member;
 /**
 * @ORM\ManyToOne(targetEntity="BM\UserBundle\Entity\User", inversedBy="member")
 */
 protected $user;
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'
    );
}
public function buildForm(FormBuilderInterface $builder, array $options)
{

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


public function getName()
{
    return 'user';
}
UserType.php

$protected $username;
$protected $email;


/**
* @ORM\OneToMany(targetEntity="BM\UserBundle\Entity\Member", mappedBy="user")
*/
protected $member;
 /**
 * @ORM\ManyToOne(targetEntity="BM\UserBundle\Entity\User", inversedBy="member")
 */
 protected $user;
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'
    );
}
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的实例,数组给定,在第345行的/var/www/proj/vendor/symfony/symfony/src/symfony/Component/propertyaaccess/propertyaaccessor.php中调用,并在/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');
        }

    }
这样试试

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'
    );
}

查看文档:

谢谢您的回复。我现在可以嵌入
用户
表单。但是我在尝试保存表单时仍然会遇到相同的错误。如何打印表单?尝试在注释(实体文件)中切换mappedBy和inversedBy。我正在使用
$form->createView()
然后使用
form_row(form.name)}
etcAre您是否使用{form_widget(form.user)}作为嵌入表单?