SOY CMS / SOY Shop

ブログトップ

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」の場合

処理IDPage.Detail

引数=1

 

2.「処理ID」から「処理」を実行する

処理IDからSOY2HTMLオブジェクトを作成し、実行する。

SOY CMSでの処理は画面単位で作成されています。

SOY2HTML経由で実行し、画面の表示を行います。

 

3.「処理ID」が取れない、不正の時は存在しないエラーを表示

4.「処理」を実行中にエラーが発生した場合はエラー画面を表示

エラー画面を表示

 

続いて、サイト側のコントローラーについて解説をします。

 

SOY CMSでは個々のサイト毎にコントローラーがあります。

コントローラーの処理の流れはこんな風になっています。

 

1.リクエストされたURLを「処理ID」に変換する

リクエストされたURLDBから検索し、ページを取得します。

 

2.「処理ID」から「処理」を実行する

1で取得したページを種別(通常、ブログ、App)に応じて実行します。

SOY Inquiryなどでフォームを表示する場合、内部からさらにSOY Inquiryのフロントコントローラーを呼び出しています。

コントローラーを多段に作ることでアプリケーション内にさらにアプリケーションを作るような意識でシステムを作成することが出来ます。

 

3.「処理ID」が取れない、不正の時は存在しないエラーを表示

4.「処理」を実行中にエラーが発生した場合はエラー画面を表示

NotFound用のページを表示します。

 

 

 

○まとめ

 

URLと処理の関連は多くのWebアプリケーション用のフレームで基本的に一つのパターンしか無いことが多いです。

SOY2_Controllerは関連するだけで特に何もしませんが、「毎回フロントコントローラーは作り直す」という設計の意識が重要だと考えています。

 

フロントコントローラーから特定のURLだけさらに小さなフロントコントローラーを呼び出すような設計も「毎回フロントコントローラーは作り直す」という考えがあればこそ出来ることです。

 

シンプルに作れて、簡単に壊せること、これが何よりも大事です。

 

 

次回はSOY2Mailなどの紹介を行います。