WEBアプリケーション研究室 開発ノート TOP

WEBアプリケーション研究室 開発ノート [symfony] イベントを理解する。

スポンサーサイト

-------- --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

    このエントリーをはてなブックマークに追加

PHPではあまり聞きなれないのでなかなか理解できなかったけどおぼろげながらわかってきました。
■何のためにあるのか?
PHPは二つのクラスを親クラスに持つことができません。(多重継承?)すでに親クラスを持っているクラスを拡張する時、別の(親クラスを持った)クラスのメソッドがそのまま使える場合があっても継承を使うことができません。そういう場合委譲(クラスの中に別クラスのインスタンスを持たせて処理させる)を使うのですが、それをsfEventDispatcherの中にまとめて持たせて集中管理するって感じでしょうか・・・(急に語尾に自信がない感じですが)

■イベントの種類
notify型
 通知側でsfEventコンストラクタの3番目の引数に連想配列を渡して、リスナーの中ではそれをイベントから配列形式で取り出せる。リスナーはなにも返さない。またすべてのリスナーを実行する。
notifyUntil型
 リスナーが一つ見つかった時点で、処理をやめる。sfEvent::isProcessed()で処理したかどうか調べられる。リスナーと値のやり取りはnotify型と同じ。リスナーはなにも返さない。
filter型
 リスナーが値を返すように作る。返した値は通知側でsfEvent()->getReturnValue()で何かに使われている。複数あっても処理はされるが、getReturnValue()は最後のもののみを返す。

リスナーをどこで登録するのかというとBookでは
apps/frontend/config/ApplicationConfiguration.class.php
に設置するように書いてある。また、プラグインの場合は
config/config.php
に書けばOK。

あらかじめ処理の途中でsfEventDispatcher::notify|notifyUntil|filterを呼び出すように設定しておいて、あとからconnectでそこに処理を足せるようにしてある感じですね。
逆に考えるとsfEventDispatcherにconnectで登録しておいたメソッドはどこからでもsfEventDispatcher::notify|notifyUntil|filterで呼び出せるともいえるでしょうか。
組み込み済みイベント一覧がこの辺にあります。

[symfony 1.1.5]

スポンサーサイト

    このエントリーをはてなブックマークに追加
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。