イベント
symfonyのコアコンポーネントはsfEventDispatcher
オブジェクトのおかげで疎結合されています。
Event Dispatcherはコアコンポーネントのあいだのコミュニケーションを管理します。
オブジェクトはディスパッチャーにイベントを通知し、ほかのオブジェクトは特定のイベントをリスニングするためにディスパッチャーに接続できます。
イベントはドット(.
)で区切られた名前空間と名前で構成される単なる名前です。
使い方
最初にイベントオブジェクトを作ることでイベントを通知できます:
$event = new sfEvent($this, 'user.change_culture', array('culture' => $culture));
そして通知します:
$dispatcher->notify($event);
sfEvent
コンストラクターは3つの引数を受け取ります:
- イベントの"subject"(たいていの場合、これはイベントを通知するオブジェクトだが
null
にもなる) - イベントの名前
- リスナーに渡すパラメーターの配列
イベントをリスニングするには、そのイベントの名前に接続します:
$dispatcher->connect('user.change_culture', array($this, 'listenToChangeCultureEvent'));
connect
メソッドは2つの引数を受け取ります:
- イベントの名前
- イベントが通知されたときに呼び出すPHP callable
リスナーの実装例は次のとおりです:
public function listenToChangeCultureEvent(sfEvent $event) { // メッセージフォーマットオブジェクトを新しいcultureで変更する $this->setCulture($event['culture']); }
リスナーは最初の引数としてイベントを受け取ります。 イベントオブジェクトはイベントの情報を得るためのメソッドをいくつか持ちます:
getSubject()
: イベントに添付するsubjectオブジェクトを取得するgetParameters()
: イベントパラメーターを返す
イベントオブジェクトはパラメーターを取得するために配列としてもアクセスできます。
イベントの種類
イベントは3つの異なるメソッドで起動できます:
notify()
notifyUntil()
filter()
notify
notify()
メソッドはすべてのリスナーを通知します。
リスナーは値を返すことはできずすべてのリスナーが実行されることが保証されます。
notifyUntil
notifyUntil()
メソッドはtrue
の値を返すことで1つのリスナーがチェーンを停止させるまですべてのリスナーを通知します。
チェーンを停止させるリスナーはsetReturnValue()
メソッドを呼び出すこともできます。
通知元のオブジェクトはリスナーはisProcessed()
メソッドを呼び出すことで処理されたイベントが保有されているかチェックできます:
if ($event->isProcessed()) { // ... }
filter
filter()
メソッドはすべてのリスナーを通知します。
これらは任意の値をフィルタリング可能で、通知元オブジェクトによって2番目の引数として渡され、3番目の引数としてリスナーのcallableによって読み取りされます。
すべてのリスナーには値が渡され、これらはフィルタリングされた値を返さなければなりません。
すべてのリスナーの実行は保証されます。
通知元オブジェクトはgetReturnValue()
メソッドを呼び出すことでフィルタリングされた値を取得できます:
$ret = $event->getReturnValue();
イベント
application
command
configuration
component
context
controller
plugin
request
response
routing
task
template
user
view
view.cache
application
application.log
通知メソッド: notify
デフォルトの通知元クラス: たくさんのクラス
パラメーター | 説明 |
---|---|
priority |
優先順位(sfLogger::EMERG 、sfLogger::ALERT 、sfLogger::CRIT 、sfLogger::ERR 、 sfLogger::WARNING 、sfLogger::NOTICE 、sfLogger::INFO もしくはsfLogger::DEBUG ) |
application.log
イベントはWebリクエストに対してロギングを行うためにsymfonyによって利用されるメカニズムです(loggerファクトリを参照)。
このイベントはたいていのsymfonyのコアコンポーネントによって通知されます。
application.throw_exception
通知メソッド: notifyUntil
デフォルトの通知元クラス: sfException
リクエスト処理のあいだに補足されない例外が投げられるときにapplication.throw_exception
イベントが通知されます。
補足されない例外が投げられたときに特別なことを行うためにこのイベントをリスニングできます(Emailメールを送信する、もしくはエラーをロギングするなど)。 イベントを処理することでsymfonyのデフォルトの例外管理メカニズムをオーバーライドすることもできます。
command
command.log
通知メソッド: notify
デフォルトの通知元クラス: sfCommand
クラス
パラメーター | 説明 |
---|---|
priority |
優先順位(sfLogger::EMERG 、sfLogger::ALERT 、sfLogger::CRIT 、sfLogger::ERR 、 sfLogger::WARNING 、sfLogger::NOTICE 、sfLogger::INFO もしくはsfLogger::DEBUG ) |
command.log
イベントはsymfonyのCLIユーティリティでロギングを行うためにsymfonyによって利用されるメカニズムです。(logger
ファクトリを参照)。
command.pre_command
通知メソッド: notifyUntil
デフォルトの通知元クラス: sfTask
パラメーター | 説明 |
---|---|
arguments |
CLIに渡される引数の配列 |
options |
CLIに渡されるオプションの配列 |
タスクの実行直前にcommand.pre_command
イベントが通知されます。
command.post_command
通知メソッド: notify
デフォルトの通知元クラス: sfTask
タスクの実行直後にcommand.post_command
イベントが通知されます。
command.filter_options
通知メソッド: filter
デフォルトの通知元クラス: sfTask
パラメーター | 説明 |
---|---|
command_manager |
sfCommandManager インスタンス |
タスクCLIのオプションが解析される前にcommand.filter_options
イベントが通知されます。
このイベントはユーザーに渡されるオプションをフィルタリングするために使うことができます。
configuration
configuration.method_not_found
通知メソッド: notifyUntil
デフォルトの通知元クラス: sfProjectConfiguration
パラメーター | 説明 |
---|---|
method |
呼び出されるが見つからないメソッドの名前 |
arguments |
メソッドに渡される引数 |
メソッドがsfProjectConfiguration
クラスで定義されていない場合configuration.method_not_found
イベントが通知されます。
このイベントをリスニングすることで、継承を使わずにクラスにメソッドを追加できます。
component
component.method_not_found
通知メソッド: notifyUntil
デフォルトの通知元クラス: sfComponent
パラメーター | 説明 |
---|---|
method |
呼び出されるが見つからないメソッド |
arguments |
メソッドに渡される引数 |
メソッドがsfComponent
クラスで定義されていないときcomponent.method_not_found
イベントが通知されます。
このイベントをリスニングすることで、継承を使わずにメソッドをクラスに追加できます。
context
context.load_factories
通知メソッド: notify
デフォルトの通知元クラス: sfContext
すべてのファクトリが初期化された直後にsfContext
オブジェクトによってリクエストごとにcontext.load_factories
イベントが1回通知されます。
これはすべてのコアクラスの初期化で通知される最初のイベントです。
controller
controller.change_action
通知メソッド: notify
デフォルトの通知元クラス: sfController
パラメーター | 説明 |
---|---|
module |
実行されるモジュールの名前 |
action |
実行されるアクションの名前 |
アクションが実行される直前にcontroller.change_action
が通知されます。
controller.method_not_found
通知メソッド: notifyUntil
デフォルトの通知元クラス: sfController
パラメーター | 説明 |
---|---|
method |
呼び出されるが見つからないメソッドの名前 |
arguments |
メソッドに渡される引数 |
メソッドがsfController
クラスで定義されていないときにcontroller.method_not_found
イベントが通知されます。
このイベントをリスニングすることで、継承を使わずにメソッドをクラスに追加することができます。
controller.page_not_found
通知メソッド: notify
デフォルトの通知元クラス: sfController
パラメーター | 説明 |
---|---|
module |
404エラーを生成するモジュールの名前 |
action |
404エラーを生成するアクションの名前 |
リクエスト処理のあいだに404エラーが生成されたときにcontroller.page_not_found
が通知されます。
Eメールを送信する、エラー、イベントをロギングするなど、404ページが表示されるときに 何か特別なことを行うためにこのイベントをリスニングできます。
plugin
plugin.pre_install
通知メソッド: notify
デフォルトの通知元クラス: sfPluginManager
パラメーター | 説明 |
---|---|
channel |
プラグインのチャンネル |
plugin |
プラグインの名前 |
is_package |
ローカルパッケージ(true )、もしくはWebパッケージ(false )をインストールするかどうか |
プラグインがインストールされる直前にplugin.pre_install
イベントが通知されます。
plugin.post_install
通知メソッド: notify
デフォルトの通知元クラス: sfPluginManager
パラメーター | 説明 |
---|---|
channel |
プラグインのチャンネル |
plugin |
プラグインの名前 |
プラグインがインストールされた直後にplugin.post_install
イベントが通知されます。
plugin.pre_uninstall
通知メソッド: notify
デフォルトの通知元クラス: sfPluginManager
パラメーター | 説明 |
---|---|
channel |
プラグインのチャンネル |
plugin |
プラグインの名前 |
プラグインがアンインストールされる直前にplugin.pre_uninstall
イベントが通知されます。
plugin.post_uninstall
通知メソッド: notify
デフォルトの通知元クラス: sfPluginManager
パラメーター | 説明 |
---|---|
channel |
プラグインのチャンネル |
plugin |
プラグインの名前 |
プラグインがアンインストールされた直後にplugin.post_uninstall
イベントが通知されます。
request
request.filter_parameters
通知メソッド: filter
デフォルトの通知元クラス: sfWebRequest
パラメーター | 説明 |
---|---|
path_info |
リクエストのパス |
リクエストパラメーターが初期化されるときにrequest.filter_parameters
イベントが通知されます。
request.method_not_found
通知メソッド: notifyUntil
デフォルトの通知元クラス: sfRequest
パラメーター | 説明 |
---|---|
method |
呼び出されたが見つからないメソッドの名前 |
arguments |
メソッドに渡される引数 |
メソッドがsfRequest
クラスで定義されていないときにrequest.method_not_found
イベントは通知されます。
このイベントをリスニングすることで、継承を使わずにメソッドをクラスに追加できます。
response
response.method_not_found
通知メソッド: notifyUntil
デフォルトの通知元クラス: sfResponse
パラメーター | 説明 |
---|---|
method |
呼び出されたが見つからないメソッドの名前 |
arguments |
メソッドに渡される引数 |
メソッドでsfResponse
クラスが定義されていないときresponse.method_not_found
イベントが通知されます。
このイベントをリスニングすることで、継承を使わずに、メソッドをクラスに追加できます。
response.filter_content
通知メソッド: filter
デフォルトの通知元クラス: sfResponse
レスポンスが送信される前にresponse.filter_content
イベントが通知されます。
このイベントをリスニングすることで、送信される前にレスポンスの内容を操作できます。
routing
routing.load_configuration
通知メソッド: notify
デフォルトの通知元クラス: sfRouting
ルーティングファクトリがルーティングコンフィギュレーションをロードするときrouting.load_configuration
イベントが通知されます。
task
task.cache.clear
通知メソッド: notifyUntil
デフォルトの通知元クラス: sfCacheClearTask
パラメーター | 説明 |
---|---|
app |
アプリケーションの名前 |
type |
キャッシュの種類(all 、config 、i18n 、routing 、module とtemplate ) |
env |
環境 |
ユーザーがcache:clear
タスクでCLIからキャッシュをクリアするときにtask.cache.clear
イベントが通知されます。
template
template.filter_parameters
通知メソッド: filter
デフォルトの通知元クラス: sfViewParameterHolder
ビューファイルがレンダリングされる前にtemplate.filter_parameters
イベントが通知されます。
このイベントをリスニングすることでテンプレートに渡される変数にアクセスおよび操作できます。
user
user.change_culture
通知メソッド: notify
デフォルトの通知元クラス: sfUser
パラメーター | 説明 |
---|---|
culture |
ユーザーのculture |
リクエストのあいだにユーザーのcultureが変更されるときにuser.change_culture
イベントが通知されます。
user.method_not_found
通知メソッド: notifyUntil
デフォルトの通知元クラス: sfUser
パラメーター | 説明 |
---|---|
method |
呼び出されるが見つからないメソッドの名前 |
arguments |
メソッドに渡される引数 |
メソッドがsfUser
クラスで定義されていないときに、user.method_not_found
イベントが通知されます。
このイベントをリスニングすることで、継承を使わずにメソッドをクラスに追加できます。
user.change_authentication
通知メソッド: notify
デフォルトの通知元クラス: sfBasicSecurityUser
パラメーター | 説明 |
---|---|
authenticated |
ユーザーが認証されているかどうか |
ユーザーの認証ステータスが変更されるときにuser.change_authentication
イベントが通知されます。
view
view.configure_format
通知メソッド: notify
デフォルトの通知元クラス: sfView
パラメーター | 説明 |
---|---|
format |
リクエストフォーマット |
response |
レスポンスオブジェクト |
request |
リクエストオブジェクト |
リクエストがsf_format
をセットするときにビューによってview.configure_format
イベントが通知されます。
レイアウトを設定するもしくは設定解除するといった単純作業をsymfonyが行った後でこのイベントが通知されます。
このイベントによってリクエストされたフォーマットに従ってビューとレスポンスオブジェクトを変更できます。
view.method_not_found
通知メソッド: notifyUntil
デフォルトの通知元クラス: sfView
パラメーター | 説明 |
---|---|
method |
呼び出され見つからないメソッドの名前 |
arguments |
メソッドに渡される引数 |
メソッドがsfView
クラスで定義されるときにview.method_not_found
イベントが通知されます。
このイベントをリスニングすることで、継承を使わずにメソッドをクラスに追加できます。
view.cache
view.cache.filter_content
通知メソッド: filter
デフォルトの通知元クラス: sfViewCacheManager
パラメーター | 説明 |
---|---|
response |
レスポンスオブジェクト |
uri |
キャッシュされるコンテンツのURI |
new |
コンテンツがキャッシュのなかで新しいものかどうか |
コンテンツがキャッシュから読み込まれるときにview.cache.filter_content
イベントが通知されます。
This work is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported License license.