0

私は2つのバンドルを手に入れました:

  • SenderBundle
  • ReceiverBundle

まず、アクションを実行してイベントをディスパッチします。たとえば、something.done。次に、このイベントを受信し、リスナーとそれに割り当てられた適切なアクションを含むReceiverBundleで処理します。$eventDispatcher->addListener()もちろんSenderBundleには入れたくない!しかし、定義されたイベントのリスナーを自動的に登録したいのです!

services.xml私はReceiverBundleに次のものを作成することを考え出しました:

<services>
    <service id="some_listener" class="My\ReceiverBundle\Class">
        <tag name="kernel.event_handler" event="something.done" method="onSomethingDone" />
    </service>
</services>

これはDependencyInjectionで自動ロードされます。

私はそれが働いているようなものだと思いました...しかし違います。私が管理したもの-リスナーはイベントが送信された後に登録されます。なぜ?!

イベントのデバッグツールバーに「リスナーが呼び出されていません」と表示されます。イベントが送信された後にリスナーが開始され、登録されたためだと思います。

他のバンドルで動作するリスナーを登録するにはどうすればよいですか?Doctrine(doctrine.event_listener)で何らかの方法で作成されていますが、どのように作成されているのかわかりません。:/

4

1 に答える 1

0

kernel.event_listener代わりにタグを使用します。

<services>
    <service id="some_listener" class="My\ReceiverBundle\Class">
        <tag name="kernel.event_listener" event="something.done" method="onSomethingDone" />
    </service>
</services>
于 2012-05-08T08:43:44.283 に答える