在FOSUserBundle上未触发REGISTRATION_SUCCESS事件

时间:2014-07-20 19:26:27

标签: php symfony fosuserbundle symfony-2.4

我需要一些帮助,因为我的代码不起作用,我找不到我失败的地方。看到这是我用来在我的应用程序上注册用户的功能(从here删除并稍微改变以满足我的需求):

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事件,因此我没有收到任何电子邮件,因此我无法确认用户,我做错了什么?

1 个答案:

答案 0 :(得分:1)

在挖掘并深入挖掘我的代码之后,我发现了问题所在。感谢打开灯泡的@tttony用户,我不小心删除了confirmation的{​​{1}}配置,因此事件从未被触发,因此简单的解决方案:

config.yml

现在在找到上一个解决方案之前,我又来了另一个,这让我学习和学习,我也离开了这里:

fos_user:
    ....
    registration:
        confirmation:
            from_email:
                address:        admin@local.com
                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()); 我不知道怎么做,所以如果有人知道我会感激如果留下答案,那么这两个解决方案都有效我测试了。