Forms 使用具有多个关系的持久化实体作为数据创建symfony表单时出现问题

Forms 使用具有多个关系的持久化实体作为数据创建symfony表单时出现问题,forms,symfony,Forms,Symfony,我为两个实体构建了表单类型 class UserType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder

我为两个实体构建了表单类型

class UserType extends AbstractType
{
        /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('createdAt')
            ->add('updatedAt')
            ->add('username')
            ->add('email')
            ->add('plainPassword')
            ->add('firstName')
            ->add('lastName')
            ->add('phoneNumber')
            ->add('address')
            ->add(
                'roles',
                'collection',
                array(
                    'type' => new UserRoleType(),
                    'data_class' => 'Mrm\AuthBundle\Entity\UserRole',
                    'required'     => false,
                    'allow_add'    => true,
                    'allow_delete' => true,
                    'by_reference' => false
                )
            )
        ;
    }

    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Mrm\AuthBundle\Entity\User'
        ));
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'mrm_authbundle_user';
    }
}

正如您可能猜到的,用户和用户角色之间存在着许多关系

如果我尝试提交新数据,一切都很完美。将创建用户和用户角色实体以及多个关系CoreRespondent条目

$manager = $this->get("doctrine.orm.entity_manager");

$user = new User();

$form = $this->createForm(new UserType(), $user);

$form->handleRequest($request);

if ($form->isValid()) {
    $manager->persist($user);
    $manager->flush();
} else {
    return View::create($form, 400);
}
但是,当我尝试实现一些逻辑来支持更新时,就像这样(请注意,代码是用于测试的,id是硬编码的…)

I get
**表单的视图数据应为类Mrm\AuthBundle\Entity\UserRole的实例,但为(n)字符串。您可以通过将“data\u class”选项设置为null或添加视图转换器来避免此错误,该转换器将(n)字符串转换为Mrm\AuthBundle\Entity\UserRole的实例。**
”错误


我做错了什么?如何修复它?

你好,Michael,User类是从FosUserBundle User类继承的吗?嗨,Airam,不是,它只是实现了UserInterface
$manager = $this->get("doctrine.orm.entity_manager");

$user = new User();

$form = $this->createForm(new UserType(), $user);

$form->handleRequest($request);

if ($form->isValid()) {
    $manager->persist($user);
    $manager->flush();
} else {
    return View::create($form, 400);
}
$manager = $this->get("doctrine.orm.entity_manager");

$repo = $manager->getRepository("MrmAuthBundle:User");    

$user = $repo->find(6);

$form = $this->createForm(new UserType(), $user);

$form->handleRequest($request);

if ($form->isValid()) {
    $manager->persist($user);
    $manager->flush();
} else {
    return View::create($form, 400);
}