我有一个事件订阅者,它正在侦听条令事件:
return [
Events::postPersist,
Events::postUpdate,
Events::postRemove,
];
它工作正常,但我需要的是在特定的应用程序操作(从命令调用(中禁用此事件以触发订阅者。我的想法是以某种方式检测从哪个范围调用flush((,有没有像debug_backrace((这样的方法(我不想使用obv.(来检测应用程序的上下文?
有一件事你可以尝试:向你的订阅者添加一个标志,这样你就可以启用或禁用你的订阅者,比如:
private $isEnabled = true;
public function disableSubscriber(): void {
$this->isEnabled = false;
}
在处理内容的每个方法中,都要检查该标志——它是false
吗,然后不要做任何其他事情。
之后,您可以将订阅者注入其他服务,就像任何其他服务一样。在您想要禁用通过该订阅者的处理的命令中,调用$subscriber->disableSubscriber();
,您就完成了