2012-06-18 71 views
0

我嘗試向事件分派器註冊自己的事件/監聽器時遇到問題。我通過bundle @ MyBundle/Resources/services.yml的服務註冊的內容僅在渲染過程中加載,因此在控制器中進行分派時不可用。由於註冊問題而未引發事件監聽器

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())); 

它不工作,嘗試調試,我可以看到,在調度方法,它無法找到我要附加的監聽器。

當試圖放入事件kernel.request而不是trav.webservice.error_connection所以它工作(偵聽器不調用,請參閱調試欄),但WebServiceListener :: OnDataConnect中的事件是GetResponseEvent而不是DataConnectEvent。

有人有什麼想法這裏有什麼錯嗎? 我從這裏得到了啓發:http://iamproblematic.com/leveraging-the-symfony2-event-dispatcher/

這似乎工作完全一樣的方式

回答

0

你發送需要匹配您正在收聽的事件的事件。該示例代碼發送一個travello.webservice.listener.data_connect事件,並且偵聽器被配置爲接收trav.webservice.error_connection事件,這意味着此偵聽器將不會收到該事件。