我在Symfony应用程序中使用FOSUB来管理我的用户。我重写了寄存器模板和控制器以使用Ajax并自定义一些东西。如果用户进行注册没有错误,它工作正常。但如果出现问题(例如,不同的paswwords),$form->isValid()
将返回false,但$form->getErrors()
数组为空。经过一些研究后,我仍然不知道如何检索这些错误。有人有个主意吗?谢谢 :)
这是我的控制器:
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");
}
答案 0 :(得分:1)
要显示密码字段的错误,您必须在密码字段中显示错误。 {{form_errors(form.plainPassword.first)}} 。如果您只是{{form_errors(form.plainPassword)}},则错误没有返回,因为错误没有冒泡。