|
|
CakePHP アプリケーションの流れを追う 2008/12/12 新原 雅司
■自己紹介 新原雅司(しんばら まさし) shin1x1 Shin x blog http://www.1x1.jp/blog/
■[告知] Python関西勉強会 2008/12/23(火) 大阪産業創造館 PHPについて話してきます http://sites.google.com/site/umedotpy/python
■Agenda フレームワークの原則 フレームワークの流れ FrontController Bootstrap Dispatcher まとめ
■フレームワークの原則
「Don‘t call us. We’ll call you.」 おまえが呼ぶな。俺が呼ぶ。 http://en.wikipedia.org/wiki/Hollywood_Principle アプリケーションはフレームワークから呼ばれる ■フレームワークの原則 「フレームワークからどう呼ばれるかを知る」
■フレームワークの流れ
■フレームワークの流れ FrontController bootstrap Dispatcher Application
■フレームワークの流れ
■Front Controller
■Front Controller mod_rewrite + app/webroot/index.php エントリポイント 主な役割 フレームワークファイルパス定義 bootstrap 実行 Dispatcher 実行
■bootstrap
■bootstrap app/webroot/index.php から実行 フレームワークを起動 主な役割 ファイルパス等の定数定義 フレームワーク主要クラス読み込み アプリケーション設定読み込み フレームワーク前処理 Dispatcher読み込み
■bootstrap app/config/core.php app/config/bootstrap.php [cake/libs/configure.php] 616 if (!include(CONFIGS . 'core.php')) { 617 trigger_error(…); 618 } 619 620 if (!include(CONFIGS . 'bootstrap.php')) { 621 trigger_error(…); 622 } ■Configure#__loadBootstrap()
■Dispatcher
■Dispatcher app/webroot/index.php から実行 アプリケーションを直接実行する 大きく分けて処理は2つ Dispatcher#dispatch() Dispatcher#_invoke()
■Dispatcher#dispatch()
■ Dispatcher#dispatch() URL決定 出力するキャッシュがあればキャッシュ出力 => Object#_stop()で処理終了 Super globalsの値を取り込む URLパース 実行するコントローラ、アクション決定 コントローラインスタンス化 Dispatcher#_invoke()実行
■Dispatcher#_invoke()
■Dispatcher#_invoke() アプリケーション実行メイン ここを押さえておけば処理の流れが分かる
前処理 startup アクション action 画面出力生成 render 後処理 shutdown
■Dispatcher#_invoke() [前処理]
前処理 startup
■Dispatcher#_invoke() [前処理] 24
■ Dispatcher#_invoke() [前処理] 25 UserControllerが持つComponent/Modelを インスタンス化
■ Dispatcher#_invoke() [前処理] 26 アクション実行の前処理 Componentが順々に実行される ( Intercepting Filterパターンのように使える)
■Component Handler for Controller::$components Controllerが持つComponentインスタンスへの一括処理を受け持つ インスタンス化 フレームワークからのメソッド呼び出し Delegator ComponentDelegator コンポーネントの基底クラスではない
■Component Shin x blog 「CakePHP 管理者サイトでBasic認証を 簡単に行うコンポーネント」 http://www.1x1.jp/blog/2008/01/cakephp_adminauthcomponent.html
■Dispatcher#_invoke() [アクション]
アクション action
■ Dispatcher#_invoke() [アクション] Object#dispatchMethod()で実行
■Dispatcher#_invoke() [画面出力生成]
画面出力生成 render
■ Dispatcher#_invoke() [画面出力生成] 画面生成前処理 Controller#render()から各処理を呼ぶ
■ Dispatcher#_invoke() [画面出力生成] 画面出力生成メイン 処理はViewクラスに委譲して、結果を受け取る 実際にの出力はDispatcherが行う
■Dispatcher#_invoke() [後処理]
後処理 shutdown
■ Dispatcher#_invoke() [後処理] アプリケーション後処理 _invoke()終了後はapp/webroot/index.phpに戻る
■まとめ 39
■まとめ 流れをイメージする Componentを積極的に活用 ソースを見れば大きな流れは単純 フレームワークのソースを読んでみよう 最近は整ってきた:-D
ご静聴ありがとうございました。 41
| URL: |
No comments posted yet
Comments