2012-06-18 6 views
0

이벤트 디스패처에 내 이벤트/수신기를 등록하는 동안 문제가 발생했습니다. @ MyBundle/Resources/services.yml 번들 서비스를 통해 등록하는 것은 렌더링 프로세스 중에 만로드되므로 컨트롤러에서 디스패치를 ​​수행 할 때는 사용할 수 없습니다. 등록 문제로 인해 이벤트 리스너가 throw되지 않았습니다.

webservice.listener.data_connect: 
    class: Trav\CoreBundle\EventListener\WebService\WebServiceListener 
    arguments: 
     mailer: '@doctrine.orm.entity_manager' 
    tags: 
     - { name: kernel.event_listener, event: trav.webservice.error_connection, method: onDataConnectEvent, class: Trav\CoreBundle\EventListener\WebService\WebServiceListener } 

하지만 defaultControler에 그 일을 할 때 : 그것은 작동하지 않습니다

$this->event_dispatcher = $this->container->get("event_dispatcher"); 
    $this->event_dispatcher->dispatch("travelyo.webservice.listener.data_connect", new DataConnectEvent(array())); 

, 디버깅하는 동안, 나는 발송 방법에 것을 볼 수 있습니다, 내가 첨부 할 리스너를 찾을 수 없습니다.

trav.webservice.error_connection 대신 kernel.request 이벤트를 넣으려고 할 때 작동합니다 (리스너가 호출되지 않고 디버그 막대에서 볼 수 있음). 그러나 WebServiceListener :: OnDataConnect의 이벤트는 GetResponseEvent입니다. DataConnectEvent가 아닙니다.

누군가 다른 아이디어가 있습니까? 나는이 점에서 영감을 받았습니다. http://iamproblematic.com/leveraging-the-symfony2-event-dispatcher/. 정확히 같은 방식으로

답변

0

당신이 당신이 듣고있는 이벤트를 일치하도록 요구를 전달하는 이벤트를 작동하는 것 같다

. 예제 코드는 travelyo.webservice.listener.data_connect 이벤트를 전송 중이고 수신기는 trav.webservice.error_connection 이벤트를 수신하도록 구성됩니다. 즉,이 수신기는 이벤트를 수신하지 않습니다.

관련 문제