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

WEBアプリケーション研究室 開発ノート [symfony] moduleとactionが決まるまで

スポンサーサイト

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

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

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

index.php(フロントコントローラー)からmoduleとactionが決まるまで
途中細かいところは省略をしていますが、ざっと整理してみました。

SF_ROOT_DIR/web/index.php

SF_ROOT_DIR/apps/名前/config/名前Configuration.class.phpをnew
ProjectConfiguration.class.phpのコンストラクタが呼ばれる
コアクラスオートロードの設定
sfEventDispatcherをnew
ルートディレクトリの初期化
オートロードの設定
プラグインのconfig.phpを読み込む
sfContextをnew
sfContextにConfigurationをセット
sfContextにEventDispatcherをセット
sfDatabaseManagerをnew
sfActionStackをnew
cach内のconfig/factories.ymlを読み込み実行
sfWebDebugLoggerを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にセット
sfSessionStorageをnewしてContextにセット
myUserをnewしてContextにセット
キャッシュがONならsfSessionStorageをnewしてContextにセット
sfFrontWebController::dispatch()をコール
sfWebRequestからmoduleとactionを取得
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]
スポンサーサイト

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