我使用symfony 2.8和FOSUserBundle,我在数据库的同一个表中有两种类型的用户,我喜欢在同一个注册页面中区分注册表单,如下所示: *
我不能在同一页面中使用两个表单实例的问题,我该怎么办?
答案 0 :(得分:2)
我将采用的方式是覆盖FOSUserBundle,然后扩展RegistrationController,可能the corresponding template。
在registerAction
中,您可以重复使用the original的某些部分,但是在创建表单的位置,您可以创建两个不同的部分,可能是这样的:
/** @var $formFactory FactoryInterface */
$clientFormFactory = $this->get('client_registration.form.factory');
$clientForm = $clientFormFactory->createForm();
$clientForm->setData($client);
/** @var $formFactory FactoryInterface */
$correspondentFormFactory = $this->get('correspondent_registration.form.factory');
$correspondentForm = $correspondentFormFactory->createForm();
$correspondentForm->setData($correspondent);
$clientForm->handleRequest($request);
$correspondentForm->handleRequest($request);
if ($clientForm->isSubmitted() && $clientForm->isValid()) {
// ...
} elseif ($correspondentForm->isSubmitted() && $correspondentForm->isValid()) {
// ...
}
return $this->render(
'@FOSUser/Registration/register.html.twig',
[
'clientForm' => $clientForm->createView(),
'correspondentForm' => $correspondentForm->createView(),
]
);
if条件中的部分可能看起来与原始控制器类似。您可能对每种用户类型都有不同的UserManager,您必须切换,但除此之外基本上是:调度事件前,保存用户,调度事件后,重定向。因为FOSUserBundle的其他部分依赖于它们,所以重新调度这两个事件是很重要的,例如:发送注册电子邮件。
在模板中,您只需在其标签中呈现两个表单。你可能不得不使用表单id,但这应该是直截了当的。