0

我正在使用 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 中的调度程序?

4

1 回答 1

1

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

将信息从事件分派到处理事件的地方传递信息的明显位置是事件本身

理想情况下,您将创建自己的自定义事件类,并使用执行工作所需的任何属性。

自定义事件将针对您的应用程序进行定制,您可以专门监听这些事件,而无需getSubject()查看监听器是否真正处理该事件。

使用 Generic 很好,虽然表达力要差得多。如果您dispatch(new CustomerCreatedEvent())立即清楚发生了什么。

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

于 2019-11-20T11:54:44.297 回答