BLOGカルテットコミュニケーションズ開発部ブログこの記事は公開されてから1年以上経過しています。情報が古い可能性がありますのでご注意ください。基一Tweetイベントディスパッチャーとイベントリスナーの関係を整理しながら、SymfonyのEventDispatcherコンポーネントを使って、簡単な実装をしてみようと思います。主要なクラスイベントイベントディスパッチャーイベントリスナーイベント何かしら動作や変更をする(した)タイミングや事象。やって書くと分かりづらいですが、JavaScriptのonClickイベントなどは比較的に目にすることが多いのではないでしょうか。イベントディスパッチャーイベントを発行する人。トリガーとか、エミッターという名前が付くこともあります。発行されたイベントを聞く人。イベントディスパッチャーがイベントを発行するのですが、それを受けて色々処理をするのがイベントリスナーになります。主要なクラスの関係これらが以下の様に絡みます。イベントが発生する(イベントディスパッチャーがイベントを発行する)各イベントリスナーがイベントを受け取り、何かしらの処理をするこうやって箇条書きにすると、至極当たり前な感じがしますね。注目すべきところは、「イベントを発行する人」と「イベントを受け取る人」が分かれている点です。削除することが出来るイベント発生箇所を変更しなくても、イベントリスナーを追加することで処理を拡張することが出来るといったことが可能になります。実際にSymfonyのEventDispatcherコンポーネントを利用して、実装してみたいと思います。Symfony/EventDispatcherインストールの仕方Composerで楽々インストール出来ます。今回は飲み会(パーティ)の幹事役を想定して実装してみました。「飲み会の内容について決まったら、参加者予定メンバーに通知したい」です。「飲み会内容決定」というイベントが発生したら、「参加予定者へ通知する」という処理をしたいと思います。イベントを定義&作成します。'2000円';次に参加者リスナーを定義&作成します。EntrantListener();イベントディスパッチャーを作成して、イベントリスナーをセットします。'notify']);イベントリスナーをセットしただけでは何も起きません。イベントディスパッチャーにイベントを発生させます。飲み会開催のお知らせ日時:2015-10-27会場:地球のやまちゃん(居酒屋)費用:2000円/人ちなみに、イベントリスナーをセットしてない別のイベントを発生させてみます。$event);何も起きませんでした。リスナーを設定していないので、正しい動作です。ここで、新しい仕様を追加します。「飲み会内容について決まったら、お店の予約も一緒にしてしまいたい」です。「飲み会内容決定」というイベントが発生したら、「参加予定者へ通知する」の他に、同時に「お店の予約」という処理をしたいと思います。ここでお店リスナーを定義&作成をします。StoreListener();「飲み会内容決定」イベントで、お店リスナーもイベントが受け取れるように登録します。'reserve']);イベントを発生させます。参加者への通知の他にお店への予約も同時に行われていることが分かります。この様に「飲み会内容決定」というイベントが発生する箇所には手を加えずに、処理を追加することが出来るところが、イベントディスパッチャーとイベントリスナーを利用する大きなメリットの一つだと思います。SymfonyのEventDispatcherコンポーネントは、イベントリスナーの登録を関数単位で行えるところも、柔軟性があって使い易いと感じました。まとめイベントディスパッチャーとイベントリスナーは、プログラム言語やフレームワークを問わず色んな所で利用されています。CakPHPアプリケーションによって細かい違いはあるかもしれませんが、概念や考え方はほとんど同じなので、一度理解してしまえば役に立つ場面が多いと思います。Symfony2の中でも様々なところで使われているので、これらの知識をベースに上手く使いこなしていけたらと思います。TtskchTheme。