自分のイベント/リスナーをイベント ディスパッチャに登録しようとして問題が発生しました。バンドル @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/。
まったく同じように機能するようです