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 に答える