仅供参考,我刚刚开始使用 Symfony,话虽如此......
使用侦听器作为服务而不是服务有什么好处?
查看文档,我发现我可以将侦听器用作服务:
但我也可以使用事件调度程序:
获得相同的功能还是我错过了什么?
我要做的是创建一个监听自定义事件的服务,我对上述场景应该采取的路线有点困惑。我看过一些关于每种设置的帖子,但没有比较两者及其差异。
感谢您的任何见解
仅供参考,我刚刚开始使用 Symfony,话虽如此......
使用侦听器作为服务而不是服务有什么好处?
查看文档,我发现我可以将侦听器用作服务:
但我也可以使用事件调度程序:
获得相同的功能还是我错过了什么?
我要做的是创建一个监听自定义事件的服务,我对上述场景应该采取的路线有点困惑。我看过一些关于每种设置的帖子,但没有比较两者及其差异。
感谢您的任何见解
简而言之,Symfony 应用程序中的事件类似于 JavaScript 中的事件:不是监听大部分与 UI 相关的事件(如鼠标点击、悬停等),而是监听应用程序中的任意事件(如异常抛出、正在发送响应,正在创建用户等)。
EventDispatcher 是围绕观察者模式构建的。对于任何发生的事件,调度程序会通知所有已注册的侦听器该事件。当然,您可以从服务容器中检索调度程序并手动注册侦听器,但这不允许我们事先侦听正在触发的事件。更糟糕的是,侦听器仅在该控制器操作中注册。
通过将侦听器配置为服务,您实际上是让框架自己完成注册过程。如果您查看app/cache/dev/appDevDebugContainer.php
(可能有点不同的名称,在我的脑海中写下这个)并搜索event_dispatcher
,您应该能够看到事件是如何自动注册的。
顾名思义,一个均匀的监听器“监听”事件,而一个事件调度器“调度”(发送)它们。
如果您想要一个侦听自定义事件(即您创建的事件)的服务,那么您必须创建一个事件调度程序来发送事件和一个监听器来侦听它们