在 symfony 事件订阅者中获取调用的上下文

Get the context of call in symfony event subscriber

我有事件订阅者,它正在监听学说事件:

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

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

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

private $isEnabled = true;

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

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

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