SOY2フレームワークの解説 4回目 SOY2Controller
2010.05.24
4回目はフロントコントローラー機能を持つSOY2Controllerについて解説します。
○フロントコントローラーとは
フロントコントローラーとは、Webアプリケーションへのアクセスを集中して管理する「フロントコントローラー」を作成し、リクエストの制御・管理を行う設計手法です。
現在では一般的になっていますので、他の多くのフレームワークでも採用されています。
phpでフロントコントローラーを実現する場合、index.phpに全ての処理を集中させるのが一般的です。
○フロントコントローラーに求められる機能
端的に言えば、「リクエストされたURL」と「処理」を紐づけることがフロントコントローラーに必要になります。
次に、「全ての箇所で同じ記述方法でフロントコントローラーを起動出来る」ことが重要になります。
//include
include("config.inc.php");
//フロントコントローラーの起動
SOY2PageController::run();
Webアプリケーション毎に「リクエストされたURL」と「処理」の関連が異なります。
その為フロントコントローラーを再設計して簡単に入れ換える必要があります。
○フロントコントローラーの実装
フロントコントローラーでは以下のような処理を行います。
1.リクエストされたURLを「処理ID」に変換する
2.「処理ID」から「処理」を実行する
3.「処理ID」が取れない、不正の時は存在しないエラーを表示
4.「処理」を実行中にエラーが発生した場合はエラー画面を表示
また、「処理」の中で必要となる以下の機能が必要になります。
・「処理ID」からURLを作成する
・「処理ID」からURLを作成し、遷移する
SOY2_Controllerではこれら全てのパターンを再設計出来る形でフロントコントローラーを考えます。
実例を挙げて解説をします。
○SOY CMSでのフロントコントローラー
管理側のURLは「/soycms/index.php/Entry」「/soycms/index.php/Page/Detail/1」のようにindex.phpに追加された形になっています。
1.リクエストされたURLを「処理ID」に変換する
index.phpより後のURLを「/」で分割して処理IDに変換する
数字より前が処理ID、数字以降は引数として分割する。
「/soycms/index.php/Page/Detail/1」の場合
処理ID=Page.Detail
引数=1
2.「処理ID」から「処理」を実行する
処理IDからSOY2HTMLオブジェクトを作成し、実行する。
SOY CMSでの処理は画面単位で作成されています。
SOY2HTML経由で実行し、画面の表示を行います。
3.「処理ID」が取れない、不正の時は存在しないエラーを表示
4.「処理」を実行中にエラーが発生した場合はエラー画面を表示
エラー画面を表示
続いて、サイト側のコントローラーについて解説をします。
SOY CMSでは個々のサイト毎にコントローラーがあります。
コントローラーの処理の流れはこんな風になっています。
1.リクエストされたURLを「処理ID」に変換する
リクエストされたURLをDBから検索し、ページを取得します。
2.「処理ID」から「処理」を実行する
1で取得したページを種別(通常、ブログ、App)に応じて実行します。
SOY Inquiryなどでフォームを表示する場合、内部からさらにSOY Inquiryのフロントコントローラーを呼び出しています。
コントローラーを多段に作ることでアプリケーション内にさらにアプリケーションを作るような意識でシステムを作成することが出来ます。
3.「処理ID」が取れない、不正の時は存在しないエラーを表示
4.「処理」を実行中にエラーが発生した場合はエラー画面を表示
NotFound用のページを表示します。
○まとめ
URLと処理の関連は多くのWebアプリケーション用のフレームで基本的に一つのパターンしか無いことが多いです。
SOY2_Controllerは関連するだけで特に何もしませんが、「毎回フロントコントローラーは作り直す」という設計の意識が重要だと考えています。
フロントコントローラーから特定のURLだけさらに小さなフロントコントローラーを呼び出すような設計も「毎回フロントコントローラーは作り直す」という考えがあればこそ出来ることです。
シンプルに作れて、簡単に壊せること、これが何よりも大事です。
次回はSOY2Mailなどの紹介を行います。