2014-01-15 17 views
5

私はイベントリスナーonKernelResponseを使用しています。Symfony2:onKernelResponseがMASTER_REQUESTと同じ2回呼び出されました

私が使用したにもかかわらず:それは私のアクションで二回MASTER_REQUESTを持っています

if (HttpKernelInterface::MASTER_REQUEST != $event->getRequestType()) { 
    return; 
} 

など<!DOCTYPE html> <html> <head>前1、およびレイアウトの終了後に除外として、他のものがあります。

彼は私の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 } 

は私が何か間違ったことをしましたか?

答えて

8

最後に、問題の原因が見つかりました:デバッグツールバー!

は、それは実際には別のMASTER_REQUEST ..

私のソリューションは、コントローラの名前のホワイト/ブラックリストで、コントローラ上でフィルタリングすることである意味、AJAX要求を送信します。

UPDATE:

ここでは、私が使用している(ので、必要であれば、あなたは簡単にいくつかの他のコントローラを除外することができます)のコードです。 `strpos($ event->のGetRequest() - - >属性 - >( '_コントローラ' を取得)、 'WebProfilerBundle')== false`を 方法賢明それわからない!私はこれをやってしまった

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; 
    } 
    // ... 
} 
+2

トリックですが、です。 – codekipple

+0

時には 'Symfony \ Bundle \ Bundle \ FrameworkBundle \ Controller \ RedirectController'であるため、除外したいこともあります。 – BentCoder

+0

私の場合は、Symfony \ Bundle \ TwigBundle \ Controller \ ExceptionControllerを2回目に呼び出しました。私はエラーを修正しなければならず、すべてうまくいきました。 – Strabek

関連する問題