我在尝试将自己的事件/侦听器注册到事件调度程序时遇到问题。我正在通过我的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中的Event i ge是GetResponseEvent和不是DataConnectEvent。
有人知道这里有什么问题吗? 我从中得到了启发:http://iamproblematic.com/leveraging-the-symfony2-event-dispatcher/。
这看起来完全一样
答案 0 :(得分:0)
您发送的事件需要与您正在侦听的事件相匹配。示例代码发送 travelyo.webservice.listener.data_connect 事件,并且侦听器配置为接收 trav.webservice.error_connection 事件,这意味着此侦听器不会收到活动。