我是Symfony的新手,现在我已经了解了基础知识,现在我正在深入了解事件和事件听众。
据我所知,当用户通过FOSUserBundle进行注册时,有三个事件会在registerAction()
内发送
这是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
状态触发此监听器,我将非常感激。
答案 0 :(得分:0)
symfony doc解释了
要加载服务配置,您必须创建一个 捆绑包的依赖注入(DI)扩展
我在存储库中进行了搜索,并且you can see,FOSUserExtension.php
文件加载了一个包含侦听器声明的服务文件。