0

我有 2 个实体UserMember

具有关联的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;

会员.php

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

我也有 2 种表单类型:

成员类型.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'
    );
}

用户类型.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)

我以正确的方式接近这个吗?

编辑:

成员控制器.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 回答