我正在使用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中被推送时,它已经初始化(以及它的所有依赖项)。
有关于ContainerwareEventDispatcher的文档:http://symfony.com/doc/current/components/event_dispatcher/container_aware_dispatcher.html但这只是解释了如何在PHP中直接使用它,而不是如何在标准的symfony2项目中配置它。
您可以将其定义为Lazy Services添加相关标记(如本文所述)作为示例:
my.handler:
class: Acme'AcmeBundle'DependencyInjection'MyHandler
lazy: true
arguments:
- @my.dependency
tags:
- { name: kernel.event_listener, event: my.event, method: handle }
请记住按照文档中的说明安装ProxyManager桥接器。
希望这能帮助