2008.11.21/Fri 22:44:24
index.php(フロントコントローラー)からmoduleとactionが決まるまで
途中細かいところは省略をしていますが、ざっと整理してみました。
SF_ROOT_DIR/web/index.php
コードをたどってみて思ったのは意外に軽そうというか、工夫されてるなと思いました。
例えば$_SERVERなんかをsfWebRequestにセットするところも参照をセットしていたり、思っていたよりインスタンス化されてるクラスも少なかった。
またContextに全部セットしてどこからでもアクセスできるやり方はすごいと思った。
恐るべしマーティン・ファウラー。
気になったのはsfWebRequestでmoduleとactionを決定するところで
[symfony 1.1.5]
途中細かいところは省略をしていますが、ざっと整理してみました。
SF_ROOT_DIR/web/index.php
SF_ROOT_DIR/apps/名前/config/名前Configuration.class.phpをnew
ProjectConfiguration.class.phpのコンストラクタが呼ばれる
コアクラスオートロードの設定
sfEventDispatcherをnew
ルートディレクトリの初期化
オートロードの設定
プラグインのconfig.phpを読み込む
プラグインのconfig.phpを読み込む
sfContextをnew
sfContextにConfigurationをセット
sfContextにEventDispatcherをセット
sfDatabaseManagerをnew
sfActionStackをnew
cach内のconfig/factories.ymlを読み込み実行
sfContextにEventDispatcherをセット
sfDatabaseManagerをnew
sfActionStackをnew
cach内のconfig/factories.ymlを読み込み実行
sfWebDebugLoggerをnewしてContextにセット
sfFileLoggerをnewしてContextにセット
sfI18NをnewしてContextにセット
sfPatternRoutingをnewしてContextにセット
sfWebRequestをnewしてContextにセット
sfSessionStorageをnewしてContextにセット
myUserをnewしてContextにセット
キャッシュがONならsfSessionStorageをnewしてContextにセット
sfFileLoggerをnewしてContextにセット
sfI18NをnewしてContextにセット
sfPatternRoutingをnewしてContextにセット
ルーティングの設定の初期化・読み込み
sfFrontWebControllerをnewしてContextにセットsfWebRequestをnewしてContextにセット
$_GETや$_POSTをrequest内にセット
同時にgetPathInfoからmoduleとactionを決定
sfWebResponseをnewしてContextにセット同時にgetPathInfoからmoduleとactionを決定
sfSessionStorageをnewしてContextにセット
myUserをnewしてContextにセット
キャッシュがONならsfSessionStorageをnewしてContextにセット
sfFrontWebController::dispatch()をコール
sfWebRequestからmoduleとactionを取得
moduleとactionにforward
moduleとactionにforward
コードをたどってみて思ったのは意外に軽そうというか、工夫されてるなと思いました。
例えば$_SERVERなんかをsfWebRequestにセットするところも参照をセットしていたり、思っていたよりインスタンス化されてるクラスも少なかった。
またContextに全部セットしてどこからでもアクセスできるやり方はすごいと思った。
恐るべしマーティン・ファウラー。
気になったのはsfWebRequestでmoduleとactionを決定するところで
というコードを呼び出してます。 何が行われてるのかよくわかりません。 とりあえず、今後イベントのコードを読み解いてみたいと思います。
return $this->dispatcher->filter(new sfEvent(
$this,
'request.filter_parameters',
array('path_info' => $this->getPathInfo())
), array())->getReturnValue();
[symfony 1.1.5]
category: symfony
go page top

