Symfony2:onKernelResponse两次调用MASTER_REQUEST

时间:2014-01-15 09:40:42

标签: symfony filter request listener master

我正在使用事件监听器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 }

我做错了吗?

1 个答案:

答案 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;
    }
  // ...
}