使用侦听器即服务而不是服务有什么好处


What advantage would there be using a Listener as a Service instead of a Service

仅供参考,我刚刚开始使用Symfony,话虽如此...

使用侦听器即服务而不是服务有什么好处?

查看文档,我发现我可以使用侦听器即服务:

  • http://symfony.com/doc/current/cookbook/service_container/event_listener.html

但我也可以使用事件调度程序:

  • http://symfony.com/doc/current/components/event_dispatcher/introduction.html

获得相同的功能还是我错过了什么?

我想做的是创建一个侦听自定义事件的服务,我对上述场景应该采取的路线有点困惑。我已经看到了一些关于每个设置的帖子,但没有比较两者和差异。

感谢您的任何见解

简而言之,Symfony应用程序中的事件类似于JavaScript中的事件:不是侦听大多数与UI相关的事件(例如鼠标点击,悬停等),而是在侦听应用程序中的任意事件(例如异常引发,响应被发送,用户被创建等)。

EventDispatcher 是围绕观察者模式构建的。对于任何发生的事件,调度程序都会通知所有已注册的侦听器有关该事件的信息。当然,您可以从服务容器中检索调度程序并手动注册侦听器,但这不允许我们侦听事先触发的事件。更糟糕的是,侦听器仅在该控制器操作中注册。

通过将侦听器配置为服务,实质上是让框架自己执行注册过程。如果您查看app/cache/dev/appDevDebugContainer.php(名称可能有点不同,写在我的头顶上)并搜索event_dispatcher,您应该能够看到事件是如何自动注册的。

顾名思义,偶数侦听器"侦听"事件,而事件调度员"调度"(发送)事件。

如果你想要一个侦听自定义事件(即你创建的事件)的服务,那么你必须创建一个事件调度程序来发送事件,甚至创建一个侦听器来侦听它们