1

参考までに、私はSymfonyを始めたばかりですが、それは...

サービスの代わりにリスナーをサービスとして使用することにはどのような利点がありますか?

ドキュメントを見ると、リスナーをサービスとして使用できることがわかります。

ただし、イベントディスパッチャーを使用することもできます。

同じ機能を取得するために、または私は何かが欠けていますか?

私が探しているのは、カスタムイベントをリッスンするサービスを作成することです。上記のシナリオでとるべきルートについて、少し混乱しています。私は各セットアップについていくつかの投稿を見ましたが、2つと違いを比較するものは何もありません。

洞察をありがとう

4

2 に答える 2

2

一言で言えば、SymfonyアプリケーションのイベントはJavaScriptのイベントに似ています。主にUI関連のイベント(マウスクリック、ホバーなど)をリッスンする代わりに、アプリケーションの任意のイベント(例外がスローされるなど)をリッスンします。送信される応答、作成されるユーザーなど)。

EventDispatcherは、オブザーバーパターンを中心に構築されています。発生したイベントについては、ディスパッチャは登録されているすべてのリスナーにイベントについて通知します。確かに、サービスコンテナからディスパッチャを取得し、リスナーを手動で登録することはできますが、これでは、事前に発生したイベントをリッスンすることはできません。さらに悪いことに、リスナーはそのコントローラーアクションにのみ登録されます。

リスナーをサービスとして構成することにより、基本的にフレームワークに登録プロセス自体を実行させることになります。を見てapp/cache/dev/appDevDebugContainer.php(少し違う名前にすることができます。これを頭のてっぺんに書いてください)、を検索するとevent_dispatcher、イベントがどのように自動的に登録されたかを確認できるはずです。

于 2012-08-09T14:41:15.217 に答える
0

名前が示すように、リスナーでさえイベントを「リッスン」し、イベントディスパッチャはイベントを「ディスパッチ」(送信)します。

カスタムイベント(つまり、作成したイベント)をリッスンするサービスが必要な場合は、イベントを送信するイベントディスパッチャーと、イベントをリッスンするリスナーの両方を作成する必要があります。

于 2012-08-09T13:38:21.840 に答える