我在尝试将自己的事件/侦听器注册到事件调度程序时遇到问题。我通过我的包@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/。
这似乎以完全相同的方式工作