FuelPHPを追った。
【リクエストのクラス構造】
リクエスト処理のクラス構造を追って見る。
レスポンスを取得するためのコードは以下。
$response = Request::forge()->execute()->response();
Requestクラス ... リクエストを管理するクラスで、HTTPだけではなく、command line も処理する。staticなメソッドも持っている。
Uriクラス ... URLを保持するクラス。URLを加工する用のstaticメソッドも持っている。
改めて追ってみると、Request, Uri共にstaticなメソッドを実装していて、
クラス変数も持っている。
Requestを例にすると「URLとURLルーティングに必要な segment を保持する + Requestに必要な処理はstaticで実装」している。
「Requestに関係ある処理はまとめる」という実装らしい。
自分はstaticな処理は別クラスで切り出していたので、こういった実装パターンは勉強になる。
Controllerクラス ... Requestを保持し、各Controllerの親となる。Requestを保持することによって、ControllerからRequest情報にアクセスできる。
Controller_Templateクラス ... Controllerを継承している。before() でテンプレートを設定して、after()でテンプレートオブジェクトを返す。
Responseクラス ... レスポンスを表現していて、body, header を保持する。
ここまでをまとめると、
RequestはUri, Response を保持している。
UriはRequestが生成して、ResponseはRequestがControllerを実行して生成する。
Request, Uri, Response, Controller の4つでリクエストルーティングは表現されている。
【コマンドライン実行】
oil refine を追ってみた。
最初にHTTPリクエストで利用している bootstrap.php を呼んでいる。
Eventを発火させるために呼んでいるんだと思う。
実行自体は引数で渡されたクラス名、メソッド名を call_fuel_func_array() で実行しているだけ。