2014-07-20 49 views
0

我需要一点帮助,因为我的代码不起作用,我找不到我失败的地方。看,这就是我使用我的应用程序注册用户的功能(从here抽放和修改一下适合我的需要):REGISTRATION_SUCCESS事件没有在FOSUserBundle上触发

public function registerAction(Request $request) 
{ 
    $em = $this->getDoctrine()->getManager(); 

    /** @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(); 

    $event = new GetResponseUserEvent($user, $request); 
    $dispatcher->dispatch(FOSUserEvents::REGISTRATION_INITIALIZE, $event); 

    if (null !== $event->getResponse()) { 
     return $event->getResponse(); 
    } 

    $entity = new SysUsuario(); 
    $form = $this->createForm(new UsuarioType(), $entity); 
    $form->handleRequest($request); 

    $user_data = $request->get('user_register'); 
    $profile_data = $request->get('user_register')['perfil']; 

    if ($form->isValid()) { 
     $user->setUsername($profile_data['persJuridica'] . $profile_data['rif']); 
     $user->setEmail($user_data['email']); 
     $user->setPlainPassword($user_data['password']); 

     $role = $profile_data['roleType']; 
     if ($role === "O") { 
      $user->addRole("ROLE_OPERADOR"); 
     } 
     elseif ($role === "CH") { 
      $user->addRole("ROLE_CENTRO_HIPICO"); 
     } 

     $userManager->updateUser($user); 

     $profile = new SysPerfil(); 
     $profile->setPersJuridica($profile_data['persJuridica']); 
     $profile->setRif($profile_data['rif']); 

     $ci = isset($profile_data['ci']) ? $profile_data['ci'] : null; 
     if ($ci != NULL) { 
      $profile->setCi($profile_data['ci']); 
     } 

     $profile->setNombre($profile_data['nombre']); 
     $profile->setApellido($profile_data['apellido']); 
     $profile->setRoleType($profile_data['roleType']); 
     $profile->setUser($user); 

     $em->persist($profile); 
     $em->flush(); 

     $event = new FormEvent($form, $request); 
     $dispatcher->dispatch(FOSUserEvents::REGISTRATION_SUCCESS, $event); 

     if (null === $response = $event->getResponse()) { 
      $url = $this->container->get('router')->generate('fos_user_registration_confirmed'); 
      $response = new RedirectResponse($url); 
     } 

     $dispatcher->dispatch(FOSUserEvents::REGISTRATION_COMPLETED, new FilterUserResponseEvent($user, $request, $response)); 

     return $response; 
    } 
    else { 
     $errors = $this->getFormErrors($formProfile); 
    } 

    return new JsonResponse(array('status' => true, 'errors' => $errors)); 
} 

这里的问题是,我的代码永远不会触发REGISTRATION_SUCCESS事件,因此我没有收到任何电子邮件,因此我无法确认用户,我做错了什么?

+0

你重写RegistrationController吗? registerAction()函数是否被触发?该表单是否有效? – tttony

+0

@tttony您所有问题的答案是“是” – ReynierPM

+0

您是否启用了电子邮件确认? – tttony

回答

1

经过挖掘和深入挖掘我的代码后,我发现问题出在哪里。由于@tttony用户谁在灯泡打开,我,一不小心,删除confirmation配置在config.yml因为这个原因,该事件从未被触发,那么最简单的办法:

fos_user: 
    .... 
    registration: 
     confirmation: 
      from_email: 
       address:  [email protected] 
       sender_name: Myself 

现在才发现以前的解决方案之前,我配备了一个又一个,这让我学习学习,我也离开这里:

/** Disable the user by default - this is done in the event */ 
$user->setEnabled(false); 

/** @var $mailer FOS\UserBundle\Mailer\MailerInterface */ 
$mailer = $this->container->get('fos_user.mailer'); 

if (null === $user->getConfirmationToken()) { 
    $user->setConfirmationToken($str->generateRandomString(32)); 
} 

$mailer->sendConfirmationEmailMessage($user); 

$session = new Session(); 
$session->set('fos_user_send_confirmation_email/email', $user->getEmail()); 

我将无法在这里做的唯一的事情就是用FOS\UserBundle\Util\TokenGeneratorInterface我不知道怎么来的,所以如果知道如果将答案留给那个人,我将不胜感激,这两种解决方案都能够在我测试之后起作用。