私は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)で何らかの方法で作成されていますが、どのように作成されているのかわかりません。:/