我激活了FOSUserBundle的用户确认。但是我不想从原始的听众那里得到回应
$url = $this->router->generate('fos_user_registration_check_email');
$event->setResponse(new RedirectResponse($url));
我想选择另一条路线。我试图扩展EventListener
namespace Acme\MyBundle\EventListener;
use FOS\UserBundle\EventListener\EmailConfirmationListener as BaseListener;
// ...
class EmailConfirmationListener extends BaseListener
{
public function onRegistrationSuccess(FormEvent $event)
{
$url = $this->router->generate('fos_user_registration_check_email');
$event->setResponse(new RedirectResponse($url));
}
}
不幸的是,EventListeners似乎不像Controller或Forms那样可扩展。(以防万一,您可能会想:我的捆绑包当然是FOSUserBundle的子级。)
因此,我想避免直接在供应商文件夹中编辑这两行(因为这样做是非常不好的做法!)。那么,我有什么办法摆脱这种灾难呢?
只需fos_user.listener.email_confirmation
通过在您的config.yml
站点中创建具有相同名称的服务来覆盖该服务即可。
# app/config/config.yml
services:
fos_user.listener.email_confirmation:
class: "Acme\MyBundle\EventListener\EmailConfirmationListener"
arguments: ["@fos_user.mailer", "@fos_user.util.token_generator", "@router", "@session"]
tags:
- { name: kernel.event_subscriber }
...甚至更清洁-创建服务正在使用的参数:
parameters:
my.funky_parameter.class: "Acme\MyBundle\EventListener\EmailConfirmationListener"
services:
fos_user.listener.email_confirmation:
class: "%my.funky_parameter.class%"
# ...
...或捆绑包扩展名加载的捆绑包的xml / yml / php配置文件中。AppKernel.php
选择这种方式时,请确保在FOSUserBundle之后注册了您的捆绑软件。
...或最佳方法:
根据文档章节如何覆盖捆绑包的任何部分中的建议,在编译器传递中更改原始服务的类名。
在选择此选项之前,也许可以深入研究如何使用编译器通行证一章。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句