2014-02-06 41 views
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"); 
} 

回答

1

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

+0

谢谢,我知道这个方法:)。我的问题是如何在控制器中获取这些错误? ('$ form-> getField('password') - > getErrors();') – Tinathnath

+0

我能够通过$ form-> createView() - > children ['temporaryPassword'] - >访问控制器中的密码错误。儿童[ '通'] - >乏[ '错误']; 您无法通过$ form-> get('password') - > children ...来访问错误,因为public没有允许您访问的方法或属性,所以您需要通过FormView类访问。 希望它可以帮助你 –

+0

你的方法工作正常,但我没有使用这种方式,我的代码中有其他错误。但实际上这是一个很好的方式谢谢:)。 对于其他观众,这里是我的方法。在FormBuilder中,我为每个字段设置了“error_bubbling”选项为“true”。通过这种方式,错误将发回给父级(即表单),并可通过$ form-> getErrors()进行访问。希望它会有所帮助。 – Tinathnath

相关问题