在Symfony 4中,如何将上下文传递给自定义事件订阅者



我使用Symfony 4,有自定义事件和订阅者,例如CustomEvent和CustomEventSubscriber。存在发送CustomEvent的模块,例如CustomModule。该模块在控制器(ControllerA(和命令(CommandB(中使用。

换句话说,可能出现以下两种情况:

ControllerA -> CustomModule -> CustomEventSubscriber(CustomEvent)

CommandB -> CustomModule -> CustomEventSubscriber(CustomEvent)

CustomEventSubscriber中的逻辑略有不同,这取决于调用CustomModule的位置(ControllerA或CommandB(。

如何将该信息传递给CustomEventSubscriber

我可以将$context属性添加到CustomEvent中,并在CustomModule中进行设置。但在这种情况下,我应该将有关上下文的信息传递给CustomModule

或者我可以使用一些全局设置,例如容器?

或者为每个CustomEvent创建两个不同的事件订阅者,禁用自动连接,并在ControllerA和CommandB中"手动"初始化并添加到调度器?

无需创建全局变量、传递容器或任何其他反模式机制。

将信息从事件调度到事件处理的明显位置是事件本身

理想情况下,您可以创建自己的自定义事件类,其中包含执行后续工作所需的任何属性。

自定义事件将根据您的应用程序进行定制,您可以专门侦听这些事件,而不必与getSubject()进行检查,以查看侦听器是否应该真正处理该事件。

使用泛型是很好的,尽管表达能力要差得多。如果你dispatch(new CustomerCreatedEvent()),很明显发生了什么。

这是您的订阅者应该监听的事件,并且它已经包含了在调度上下文中收集的所有必要信息。

相关内容

  • 没有找到相关文章

最新更新