Symfony2:onKernelResponse 调用两次作为 MASTER_REQUEST
Posted
技术标签:
【中文标题】Symfony2:onKernelResponse 调用两次作为 MASTER_REQUEST【英文标题】:Symfony2 : onKernelResponse called twice as MASTER_REQUEST 【发布时间】:2014-02-03 16:59:58 【问题描述】:我正在使用事件监听器onKernelResponse
。
尽管我使用过:
if (HttpKernelInterface::MASTER_REQUEST != $event->getRequestType())
return;
我的操作中有两次MASTER_REQUEST
,在<!DOCTYPE html> <html> <head>
etc 之前有一个,另一个在布局结束后例外。
他是我的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
我是不是做错了什么?
【问题讨论】:
【参考方案1】:终于找到问题的根源了:调试工具栏!
它实际上发送了一个ajax请求,意味着另一个MASTER_REQUEST
..
我的解决方案是使用控制器名称的白/黑列表过滤控制器。
更新:
这是我正在使用的代码(因此您可以在需要时轻松排除其他一些控制器)。
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;
// ...
【讨论】:
我最终这样做了 -strpos($event->getRequest()->attributes->get('_controller'), 'WebProfilerBundle') !== false
不知道这有多明智,但确实有效。
有时它是Symfony\Bundle\FrameworkBundle\Controller\RedirectController
,所以您可能也想排除它。
在我的情况下,我有 Symfony\Bundle\TwigBundle\Controller\ExceptionController 第二次调用。我必须修复一个错误,然后一切正常。以上是关于Symfony2:onKernelResponse 调用两次作为 MASTER_REQUEST的主要内容,如果未能解决你的问题,请参考以下文章