我现在遇到的问题与Symfony2中的实体和表单有关。
在创建引用一个实体的表单时,我可以通过说:
来简单地连接它$user = new User();
$form->createForm(new UserType(), $user);
...
$manager->persist($user);
$manager->flush();
这很好用。但是当我有基于其他形式构建的更复杂的形式时,问题就会出现,例如
因此,我们假设我有一个名为 RegistrationType 的表单,其中包含两个名为 UserType 的表单,这些表单连接到用户实体, ProfileType 连接到个人资料实体。
现在,我如何在控制器中处理它?我的意思是,我做不了类似的事情:
$user = new User();
$profile = new Profile();
$form->createForm(new RegisterType(), $user, $profile);
OR
$form->createForm(new RegisterType(), [$user, $profile]);
...
$manager->persist($user);
$manager->flush();
$profile->setUserId($user->getId());
$manager->persist($profile);
$manager->flush();
如果我只传递$ user,那么
$form->createForm(new RegisterType(), $user);
Symfony会抱怨有些属性没有映射,当然我可以将它们设置为“映射”。 =>是的,但我必须稍后手动设置它们。
处理此问题的最佳方式是什么?
提前致谢!
答案 0 :(得分:2)
制作UserType
,ProfileType
和RegistrationType
表单。 RegistrationType
应添加UserType
和ProfileType
作为其子级。创建Registration
DTO并将其设为data_class
RegistrationType
。然后你可以写点像
$user = new User();
$profile = new Profile();
$form->createForm(new RegistrationType(),
new Registration($user, $profile));