我正在使用事件监听器onKernelResponse
。
尽管我使用过:
if (HttpKernelInterface::MASTER_REQUEST != $event->getRequestType()) {
return;
}
我的行动中有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 }
我做错了吗?
答案 0 :(得分:9)
终于找到了问题的根源:调试工具栏!
它实际上发送了一个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;
}
// ...
}