【问题标题】:Get the context of call in symfony event subscriber在 symfony 事件订阅者中获取调用的上下文
【发布时间】:2020-08-12 06:31:22
【问题描述】:

我有事件订阅者,它正在监听教义事件:

return [
    Events::postPersist,
    Events::postUpdate,
    Events::postRemove,
];

它工作正常,但我需要的是在特定的应用程序操作(从命令调用)中禁用此事件以触发订阅者。 我的想法是以某种方式检测从哪个范围调用flush(),有没有像debug_backrace()(我不想使用obv。)这样的方法来检测应用程序的上下文?

【问题讨论】:

  • 你为什么需要那个?由于您的订阅者是普通服务:为什么不向它添加一个标志,将服务注入您的命令,然后从该命令设置该标志?
  • @NicoHaase 这是因为我需要在每次更新/持久化/删除任何实体时触发此订阅者,但仅在此特定操作中(命令调用 updateService,它正在调用多个其他正在操作更新对象的类)我不想触发这个订阅者
  • 那你有什么办法解决这个问题?我的第一条评论对你有帮助吗?
  • 我明白了,我试过了,效果很好,谢谢你的帮助,我没有意识到,订阅者仍然只是一个服务

标签: symfony doctrine-orm subscriber


【解决方案1】:

您可以尝试一件事:向您的订阅者添加一个标志,以便您可以启用或禁用您的订阅者,例如:

private $isEnabled = true;

public function disableSubscriber(): void {
    $this->isEnabled = false;
}

在你处理东西的每个方法中,你检查那个标志 - 它是false,然后不要做任何你会做的事情。

之后,您可以将订阅者注入其他服务,就像任何其他服务一样。在要禁用通过该订阅者处理的命令中,调用 $subscriber->disableSubscriber(); 即可完成

【讨论】:

    猜你喜欢
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多