Symfony事件-如何不通过Profiler或预热触发内核事件

时间:2019-05-15 11:53:49

标签: symfony events controller profiler

Symfony v3.4项目,具有多个已定义的侦听器/订户,用于各种目的。它们与kernel.requestkernel.controller事件相关。

我注意到,Symfony的探查器工具发出的任何请求以及Symfony正在预热代码缓存时也会触发所有这些请求。

真的是那样吗? 当页面请求来自Profiler时,是否有一种不错的方式可以不触发已定义的kernel。*事件(至少是特定事件)?最好的方法是什么?

关于排除预热方面的事件-我认为,如果不进行所有预热等操作,预热将会更快,因此开发会稍快一些。

我在这里看到了一个更早回答的问题:How to prevent Symfony profiler from accessing or executing a listener,但是在我的用例中似乎要做很多工作-更改系统中所有现有的控制器。 另外,其他提供的注释/补丁似乎并不是处理此问题的好方法。感谢您的任何见识。

1 个答案:

答案 0 :(得分:0)

很遗憾,这是不可能的,因为WebProfilerBundle依赖于symfony's event system

由于探查器路由以_前缀开头,因此您可以使用以下命令将其忽略:

$route = $event->getRequest()->attributes->get('_route');
if (strpos($route, '_') === 0) {
    return;
}
  _twig_error_test              ANY      ANY      ANY    /_error/{code}.{_format}           
  _wdt                          ANY      ANY      ANY    /_wdt/{token}                      
  _profiler_home                ANY      ANY      ANY    /_profiler/                        
  _profiler_search              ANY      ANY      ANY    /_profiler/search                  
  _profiler_search_bar          ANY      ANY      ANY    /_profiler/search_bar              
  _profiler_phpinfo             ANY      ANY      ANY    /_profiler/phpinfo                 
  _profiler_search_results      ANY      ANY      ANY    /_profiler/{token}/search/results  
  _profiler_open_file           ANY      ANY      ANY    /_profiler/open                    
  _profiler                     ANY      ANY      ANY    /_profiler/{token}                 
  _profiler_router              ANY      ANY      ANY    /_profiler/{token}/router          
  _profiler_exception           ANY      ANY      ANY    /_profiler/{token}/exception       
  _profiler_exception_css       ANY      ANY      ANY    /_profiler/{token}/exception.css