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

时间:2015-02-08 16:05:09

标签: php symfony events dispatcher lazy-initialization

我正在使用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项目中配置它。

1 个答案:

答案 0 :(得分:3)

您可以将其定义为懒惰服务,例如添加相对标记(如here所述):

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

请记住按照文档

中的说明安装 ProxyManager网桥

希望这个帮助