gpt4 book ai didi

events - 如何覆盖 FOSUserBundle 的 EmailConfirmationListener

转载 作者:行者123 更新时间:2023-12-04 02:52:54 28 4
gpt4 key购买 nike

我激活了 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 似乎不可扩展,就像 Controllers 或 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 之后注册在选择这种方式时。

...或最好的方法:

在编译器传递中更改原始服务的类名作为文档章节 How to Override any Part of a Bundle建议。

或许可以深入了解一下 How to work with Compiler Passes 章节在选择此选项之前。

关于events - 如何覆盖 FOSUserBundle 的 EmailConfirmationListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18745087/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com