symfony2 事件调度器延迟加载监听器

symfony2 event dispatcher lazy loading listener

我正在使用 Symfony Event Dispatcher 创建我自己的一些事件,效果很好。

但是我注意到,我在 symfony 中配置的侦听器不是延迟加载的,它总是被初始化的。 然而它很少被使用。

我的 services.yml 中的配置如下所示:

my.handler:
    class: Acme\AcmeBundle\DependencyInjection\MyHandler
    arguments:
      - @my.dependency
    tags:
      - { name: kernel.event_listener, event: my.event, method: handle }

有没有办法将其配置为@my.handler 仅在触发事件时才初始化? 因为现在它在被推送到 Dispatcher 时被初始化(连同它的所有依赖项)。

有关于 ContainerAwareEventDispatcher 的文档: http://symfony.com/doc/current/components/event_dispatcher/container_aware_dispatcher.html 但这只说明了如何在 PHP 中直接使用它,而不是如何在标准的 symfony2 项目中配置它。

您可以将其定义为 Lazy Services 添加相关标签(如 here 所述),例如:

my.handler:
    class: Acme\AcmeBundle\DependencyInjection\MyHandler
    lazy: true
    arguments:
      - @my.dependency
    tags:
      - { name: kernel.event_listener, event: my.event, method: handle }

记得按照文档中的说明安装 ProxyManager 网桥

希望对您有所帮助