Symfony事件订阅者特定路径



我正在做一个项目,基本上它是一个包含2个领域的项目:主要前端(主要用于客户)和后端(用于员工管理事情,这是通过/admin访问)。现在,对于前端和后端,我们有几个事件订阅者。

问题是,每个订户都有一个KernelEvents::CONTROLLER功能。但不管控制器是什么,不管子控制器是什么;等等,所有这些都会被执行。

我的问题是,是否有可能将EventSubscribers绑定到一个特定的路径,一组控制器或其他东西,这样,并不是所有的事件订阅者与KernelEvents::CONTROLLER得到调用每次有人去网站?我知道我可以内置if语句,但仍然会为所有这些事件订阅者做DI,即使路由不需要特定的订阅者,它们也会被调用。

(我没有更好的显示,我试着搜索这个,但我没有得到任何答案,或者也许我不理解文档。)至于代码:

public static function getSubscribedEvents() {
return [
KernelEvents::CONTROLLER => 'onControllerEvent'
];
}

这基本上是我在多个事件订阅者中所拥有的,当然,在构造函数中注入的模块和onControllerEvent函数内部的函数不同,希望这澄清了任何问题)

KernelEvents::CONTROLLER事件的所有侦听器/订阅者接收一个ControllerEvent对象,其中包含Request对象(参见https://github.com/symfony/symfony/blob/5.4/src/Symfony/Component/HttpKernel/HttpKernel.php#L139)。通过Request对象,您可以根据侦听器/订阅器中的路径进行区分。这可能不是最佳实践,但您可以这样做。

所有的听众/订阅者仍然会开火,正如@Cerad所说。但是,您可以在执行与性能相关的代码之前中止事件的处理。

相关内容

  • 没有找到相关文章

最新更新