首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FOSUserBundle中的自定义寄存器控制器不返回错误

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

Stack Overflow用户
提问于 2014-02-06 18:56:02
回答 1查看 2.2K关注 0票数 2

我在使用Symfony应用程序中的FOSUB来管理我的用户。我过度使用了寄存器模板和控制器来使用Ajax并定制了一些东西。如果用户继续注册而没有错误,它可以正常工作。但是如果有什么不对劲的话。$form->isValid()返回false,但$form->getErrors()数组为空。经过一些研究,我仍然不知道如何检索这些错误。有人想到办法了吗?谢谢:)这是我的控制器:

代码语言:javascript
复制
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");
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-10 16:50:27

要显示密码字段的错误,必须在密码字段上显示错误。{ form_errors(form.plainPassword.first) }.如果只执行{{ form_errors(form.plainPassword) }},则错误不会返回,因为错误不会冒泡。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21611561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档