Bon*_*uar 6 master request filter listener symfony
我正在使用事件监听器onKernelResponse.
尽管我用过:
if (HttpKernelInterface::MASTER_REQUEST != $event->getRequestType()) {
return;
}
Run Code Online (Sandbox Code Playgroud)
它MASTER_REQUEST在我的动作中有两次,在<!DOCTYPE html> <html> <head>等之前有一次,而另一次在布局结束后排除.
他是我的services.yml:
history.listener:
class: VENDOR\MyBundle\Service\HistoryListener
arguments: [@doctrine.orm.entity_manager, @logger, @history]
tags:
- { name: kernel.event_listener, event: kernel.controller, method: onKernelController }
- { name: kernel.event_listener, event: kernel.response, method: onKernelResponse }
Run Code Online (Sandbox Code Playgroud)
我做错什么了吗 ?
终于找到了问题的根源:调试工具栏!
它实际上发送一个ajax请求,意思是另一个MASTER_REQUEST..
我的解决方案是在Controller上进行过滤,使用控制器名称的白/黑列表.
更新:
这是我正在使用的代码(因此,如果需要,您可以轻松地排除其他一些控制器).
public function __construct()
{
$this->classesExcluded = array("Symfony\Bundle\WebProfilerBundle\Controller\ProfilerController");
}
public function onKernelController(FilterControllerEvent $event)
{
$controller = $event->getController();
if (!is_array($controller) || HttpKernelInterface::MASTER_REQUEST != $event->getRequestType() || in_array(get_class($controller[0]), $this->classesExcluded)) {
return;
}
// ...
}
Run Code Online (Sandbox Code Playgroud)