Symfony2 - 尝试了解FOSUserBundle注册确认

时间:2016-05-04 12:07:12

标签: php symfony fosuserbundle

我是Symfony的新手,现在我已经了解了基础知识,现在我正在深入了解事件和事件听众。

据我所知,当用户通过FOSUserBundle进行注册时,有三个事件会在registerAction()内发送

  1. REGISTRATION_INITIALIZE
  2. REGISTRATION_SUCCESS
  3. REGISTRATION_COMPLETED
  4. 这是registerAction代码

    public function registerAction(Request $request)
        {
            /** @var $formFactory \FOS\UserBundle\Form\Factory\FactoryInterface */
            $formFactory = $this->get('fos_user.registration.form.factory');
            /** @var $userManager \FOS\UserBundle\Model\UserManagerInterface */
            $userManager = $this->get('fos_user.user_manager');
            /** @var $dispatcher \Symfony\Component\EventDispatcher\EventDispatcherInterface */
            $dispatcher = $this->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);
    
            $form->handleRequest($request);
    
            if ($form->isValid()) {
                $event = new FormEvent($form, $request);
                $dispatcher->dispatch(FOSUserEvents::REGISTRATION_SUCCESS, $event);
    
                $userManager->updateUser($user);
    
                if (null === $response = $event->getResponse()) {
                    $url = $this->generateUrl('fos_user_registration_confirmed');
                    $response = new RedirectResponse($url);
                }
    
                $dispatcher->dispatch(FOSUserEvents::REGISTRATION_COMPLETED, new FilterUserResponseEvent($user, $request, $response));
    
                return $response;
            }
    
            return $this->render('FOSUserBundle:Registration:register.html.twig', array(
                'form' => $form->createView(),
            ));
        }
    

    现在在config.yml内我们可以设置配置,因此用户需要在帐户被激活之前确认他们的电子邮件地址,这就是我迷路的地方

    fos_user:
        registration:
            confirmation:
                enabled: true
    

    我正在查看EmailConfirmationListener,它会收听REGISTRATION_SUCCESS,在此代码中,我发现没有任何内容可以告诉我它是如何阅读confirmation中的config.yml

    如果有人能够向我解释如何根据confirmation enabled状态触发此监听器,我将非常感激。

1 个答案:

答案 0 :(得分:0)

symfony doc解释了

  

要加载服务配置,您必须创建一个   捆绑包的依赖注入(DI)扩展

我在存储库中进行了搜索,并且you can seeFOSUserExtension.php文件加载了一个包含侦听器声明的服务文件。