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