0

我在尝试将自己的事件/侦听器注册到事件调度程序时遇到问题。我通过我的包@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/

这似乎以完全相同的方式工作

4

1 回答 1

0

您调度的事件需要与您正在侦听的事件相匹配。示例代码正在发送travelyo.webservice.listener.data_connect事件,并且监听器被配置为接收trav.webservice.error_connection事件,这意味着该监听器不会接收到该事件。

于 2012-06-18T14:46:39.030 回答