FOSUserBundle中的自定义寄存器控制器不会返回错误

时间:2014-02-06 18:56:02

标签: php symfony override registration fosuserbundle

我在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");
}

1 个答案:

答案 0 :(得分:1)

要显示密码字段的错误,您必须在密码字段中显示错误。 {{form_errors(form.plainPassword.first)}} 。如果您只是{{form_errors(form.plainPassword)}},则错误没有返回,因为错误没有冒泡。