在symfony事件订阅者中获取通话上下文

问题描述

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

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

一切正常,但是我需要在特定的应用程序操作(从命令中调用)中禁用此事件以触发订户。 我的想法是以某种方式检测来自哪个作用域的flush(),是否有像debug_backrace()(我不想使用obv。)那样的方法来检测应用程序的上下文?

解决方法

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

private $isEnabled = true;

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

在处理事物的每个方法中,您都要检查该标志-是否为false,然后不要做其他事情。

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