【发布时间】:2015-04-18 23:31:34
【问题描述】:
关于我在阅读本文时发现的一个小而重要的细节的问题:http://symfony.com/doc/current/cookbook/event_dispatcher/before_after_filters.html
手册说,声明的 TokenListener 将在每个请求上执行。因此,如果我有一个带有很多控制器(或带有自己的控制器的捆绑包)的大型应用程序,以及很多其他类型的事件侦听器,那么这种行为会增加开销:每个事件侦听器都将在每个请求中执行每个捆绑!例如,我有默认的 AppBundle 和 ApiBundle,在给定的示例中,TokenListener 会在请求两个捆绑包的情况下执行,因为在应用程序特定的配置中定义:app/config/services.yml
如何避免这种行为?如何仅定义每个捆绑包或更好的每个控制器的侦听器?也许,它可以在特定于 bundle 的 services.yml 中定义,但这对于监听器的范围也太宽了,在一些控制器中使用。
【问题讨论】:
-
您可能混淆了控制器和侦听器的概念。令牌侦听器是请求侦听器,并在控制器已知之前进行处理,因此为每个控制器分配侦听器几乎没有意义。查看 HttpKernel::handle 代码以了解工作流程。它并没有你想象的那么糟糕。
标签: php symfony events controller kernel