2
我在我的Symfony应用程序中使用FOSUB来管理我的用户。我重写了注册模板和控制器以使用Ajax并自定义一些东西。如果用户进行注册并且没有错误,它可以正常工作。但是如果有什么错误(例如不同的密码),$form->isValid()
返回false,但$form->getErrors()
数组是空的。经过一些研究,我仍然不知道如何检索这些错误。任何人有想法?谢谢:) 这里是我的控制器:FOSUserBundle中的自定义寄存器控制器不会返回错误
public function registerAction(Request $request)
{
if($request->isXmlHttpRequest())
{
$returnArray = array();
/** @var $formFactory \FOS\UserBundle\Form\Factory\FactoryInterface */
$formFactory = $this->container->get('fos_user.registration.form.factory');
/** @var $userManager \FOS\UserBundle\Model\UserManagerInterface */
$userManager = $this->container->get('fos_user.user_manager');
/** @var $dispatcher \Symfony\Component\EventDispatcher\EventDispatcherInterface */
$dispatcher = $this->container->get('event_dispatcher');
$user = $userManager->createUser();
$user->setEnabled(true);
$event = new GetResponseUserEvent($user, $request);
$dispatcher->dispatch(FOSUserEvents::REGISTRATION_INITIALIZE, $event);
if (null !== $event->getResponse()) {
return $event->getResponse();
}
$form = $formFactory->createForm();
$form->setData($user);
if ('POST' === $request->getMethod()) {
$form->bind($request);
if ($form->isValid()) {
$event = new FormEvent($form, $request);
$dispatcher->dispatch(FOSUserEvents::REGISTRATION_SUCCESS, $event);
$userManager->updateUser($user);
if (null === $response = $event->getResponse()) {
$returnArray[] = array("success" => "Registration confirmed.");
$returnArray[] = array("info" => "An email has been send.");
}
$dispatcher->dispatch(FOSUserEvents::REGISTRATION_COMPLETED, new FilterUserResponseEvent($user, $request, $response));
return new Response(json_encode($returnArray));
}
else
{
foreach($form->getErrors() as $error)
$returnArray[] = array("error" => $error->getMessage());
return new Response(json_encode($returnArray));
}
}
}
return new Response("This is not XHR");
}
谢谢,我知道这个方法:)。我的问题是如何在控制器中获取这些错误? ('$ form-> getField('password') - > getErrors();') – Tinathnath
我能够通过$ form-> createView() - > children ['temporaryPassword'] - >访问控制器中的密码错误。儿童[ '通'] - >乏[ '错误']; 您无法通过$ form-> get('password') - > children ...来访问错误,因为public没有允许您访问的方法或属性,所以您需要通过FormView类访问。 希望它可以帮助你 –
你的方法工作正常,但我没有使用这种方式,我的代码中有其他错误。但实际上这是一个很好的方式谢谢:)。 对于其他观众,这里是我的方法。在FormBuilder中,我为每个字段设置了“error_bubbling”选项为“true”。通过这种方式,错误将发回给父级(即表单),并可通过$ form-> getErrors()进行访问。希望它会有所帮助。 – Tinathnath