symfonyのイベント

5/18にsymfony勉強会があり、イベントという機能について発表してきました。

symfonyのイベント(sfEventDispatcher)はsymfony1.1以降から利用できるsymfonyのコア部分を拡張するための手段で、1.0のころに用意されていたMixinという機能に取って代わるものです。

コアクラスが用意しているイベント発生時に、自前のメソッドを呼び出すように登録ができ*1、登録したメソッドを順次実行するのがイベントディスパッチャという機能になります。

どのようなイベントが用意されているかはsymfony 1.x legacy websiteに一覧があるので簡単に確認できます。

また、この話を聞いて「なんだObserverパターンではないか」と思われた方。正解です。
別にsymfonyだけが持っている機能というわけではなく、ごく一般的にOberserパターンとして知られている実装になります。

なので、PEARhttp://pear.php.net/manual/ja/package.event.event-dispatcher.phpを使えば同じことがPHPでできます。

って発表してたのですが、本家ブログにタイムリーな記事が!

というのも、symfony2.0で提供される機能をフレームワーク外で利用できるようにPHPのライブラリとして提供するためのサイトを作成しているようです。
Symfony Components

そして、この中にEventDispatcherがあるので、PEARを使っても良いですし、このコンポーネントを使えばsymfonyを使っていないプロジェクトでも利用可能になるようです。
たとえば、CakePHP+EventDispatcher(from symfony)なんてのも可能ですね。

そして、各ライブラリにキャラクターが用意されるようで、この記事の最初のキャラクターがDispatcherに書かれていたタコ?です。

というわけで、発表のスライドは以下で参照できます。

http://www.slideshare.net/brtriver/symfony-study-090518

スライドだけでは説明不足なところもあると思いますが、雰囲気は伝わると思います。

いつもながらディノさんありがとうございました。また、参加者の皆様おつかれさまでした。

*1:これをリスナーという