2014-01-15 2 views
5

이벤트 리스너 onKernelResponse을 사용하고 있습니다.Symfony2 : onKernelResponse가 MASTER_REQUEST만큼 두 번 호출되었습니다.

내가 사용에도 불구하고 : 그것은 내 행동에 두 번 MASTER_REQUEST을 보내고

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

, 등등 <!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 } 

내가 했습니까 뭔가 잘못?

답변

8

마지막으로 문제의 원인을 발견했습니다 : 디버그 도구 모음!

은 실제로 다른 MASTER_REQUEST ..

내 용액 컨트롤러의 이름의 블랙/화이트리스트 제어기 필터링하는 의미는 Ajax 요청을 보낸다.

UPDATE : 여기

내가 사용하고 코드입니다 (필요한 경우 그래서 당신은 쉽게 다른 컨트롤러를 제외 할 수 있습니다).

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

내가이 일을 결국 -'strpos ($ 이벤트 ->를 대해 GetRequest() -> 속성 -> 수 ('_ 컨트롤러'), 'WebProfilerBundle')! == FALSE ' 방법을 모르는 현명한 트릭입니다. – codekipple

+0

때로는'Symfony \ Bundle \ Bundle \ ControllerBundle \ Controller \ RedirectController'이기도하므로 제외시킬 수도 있습니다. – BentCoder

+0

제 경우에는 Symfony \ Bundle \ TwigBundle \ Controller \ ExceptionController를 두 번 호출했습니다. 나는 오류를 고쳐야했고 그 다음에는 모두 잘 돌아갔다. – Strabek