Symfony2:禁用供应商事件侦听器

Symfony2:禁用供应商事件侦听器,symfony,service,listener,single-sign-on,fosuserbundle,Symfony,Service,Listener,Single Sign On,Fosuserbundle,我有一个使用SSO和FosUserBundle的Symfony2应用程序。但是,有一个FosUserBundle事件侦听器,当用户登录时会触发该侦听器,从而停止我的SSO捆绑包的工作 在我的app/config/config.yml中是否有一种方法可以轻松禁用这个特定的FosUserBundle侦听器 另外,侦听器是FOS\UserBundle\EventListener\LastLoginListener::onSecurityInteractiveLogin浏览一下EventDispatch

我有一个使用SSO和FosUserBundle的Symfony2应用程序。但是,有一个FosUserBundle事件侦听器,当用户登录时会触发该侦听器,从而停止我的SSO捆绑包的工作

在我的
app/config/config.yml
中是否有一种方法可以轻松禁用这个特定的FosUserBundle侦听器


另外,侦听器是
FOS\UserBundle\EventListener\LastLoginListener::onSecurityInteractiveLogin

浏览一下EventDispatcher代码,我看不到任何简单的方法来禁用config.yml中的一个特定侦听器

您可以做的一件事是使用自己的类扩展LastLoginListener,将参数
fos\u user.security.interactive\u login\u listener.class
(请参阅)设置为扩展类,并使用以下内容覆盖
getSubscribedEvents()

public static function getSubscribedEvents()
{
    return array(
        FOSUserEvents::SECURITY_IMPLICIT_LOGIN => 'onImplicitLogin',
    );
}
从而删除
SecurityEvents::INTERACTIVE\u LOGIN
事件的订阅

不确定这是否是最干净的方法,但它可能是需要最少代码行的方法

编辑:

为了进一步说明我的答案,我认为无法通过配置文件禁用特定侦听器方法的原因是因为LastLoginListener使用kernel.event_订户标记来指示它正在侦听自定义事件

Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\registerKernellelistenersPass
类使用kernel.event\u订户标记在每个服务上调用
getSubscribedEvents()
方法,然后为所有返回的类+回调添加事件订阅

在设置此设置的代码中,似乎没有任何覆盖


然而,我是基于查看代码来完成这一切的,因此可能有一个选项我错过了。

我要说的是,捆绑包有责任提供配置以禁用其某些行为

因此,如果不是这样,则进行更改(默认情况下启用事件侦听器)并发送PR:)

以下是通过配置启用/禁用的一些示例:


使用相应的配置:

您可以替换服务定义并使用具有相同接口但不执行任何操作的存根类

services:
    acme.menu.adaptor:
        class: MyProject\Helper\NullMenuAdapter
        tags:
            -  { name: 'acme.menu.adaptor' }
有时,如果服务依赖于标记,您可以删除它们:

services:
    acme.menu.adaptor:
        class: Acme\Helper\RealMenuAdapter
#        tags:
#            -  { name: 'acme.menu.adaptor' }

@是的!