关于我在阅读本文时发现的一些但重要细节的问题:http://symfony.com/doc/current/cookbook/event_dispatcher/before_after_filters.html
手动说,声明的TokenListener 将在每个请求上执行。所以,如果我有一个带有很多控制器的大应用程序(或带有自己的控制器的bundle),以及许多其他类型的事件监听器,这个问题会增加开销:每个事件监听器都将在每个请求中执行每捆!例如,我有默认的AppBundle和ApiBundle,在给定的示例中,TokenListener在请求两个bundle时执行,因为在app特定的配置中定义:app / config / services.yml
如何避免这种情况?如何仅为每个包定义侦听器,或者更好地为每个控制器定义?也许,它可以在特定于bundle的services.yml中定义,但是对于一些控制器中使用的侦听器来说,这也是一个太广泛的范围。
答案 0 :(得分:0)
请注意,每次打开页面时可能只有一个请求(除子请求外)。因此只能调用一次监听器。
如果您还查看了侦听器的代码,您可以看到,当控制器是TokenAuthenticatedController
的实例时,它只执行了“复杂逻辑”。这意味着它已经完成了你所说的你想做的事情:只执行一些控制器。
唯一的开销是监听器的调用。这不会增加太多开销。
当控制器不是TokenAuthenticatedController
的实例时,做一些事情来防止监听器被调用意味着你只是将检查的instanceof检查从监听器移到监听器之前的方法,最终得到完全相同的开销。