Curry
PHP Framework

core

db

html

utility

Controller

クラス概要

コントローラークラスはリクエスト情報を直接処理し、モデルやビューを制御します。
リクエストに対してはURIに含まれるコントローラー、アクションのキーを元にルーティングが行われ、処理対象とするコントローラークラス・アクションメソッドが決まり、実行されます。
そこまでの処理はフレームワークによって行われるため、実装者にとってはアクションメソッドが処理の起点となります。
そのため、コントローラークラスは実装者がインスタンスを生成してメソッドを実行するという性質のものではなく、特殊なクラスと言えます。

このようなコントローラーとしての機能を持たせるクラスは必ずControllerクラスを継承します。
そしてコントローラーディレクトリ内にControllerを継承したクラスを定義します。コントローラーディレクトリはデフォルトでは"app/controllers/"です。

実装方法は実装者の自由ですが、MVCの観点からはコントローラーはモデルやビューの制御に徹するのが良いでしょう。システムのメインとなるロジックを記述すべきではありません。そのようなロジックはモデルに記述し、コントローラーはそのメソッドを呼び出す程度にとどめます。

クラスファイル位置

curry/core/controller.php

フィールド

フィールド名 アクセス 概要
$autoValidate protected boolean オートバリデートを有効にするか否か。
trueに設定するとGETやPOSTなどののリクエストパラメーターに対して自動的に検証が実行されます。検証のルールは別途、$validateRulesフィールドで設定します。
懸賞はアクションメソッドやpreProcessよりも前のタイミングで行われるため、アクション単位で有効・無効を設定することはできず、コントローラーのフィールドとして設定し、そのコントローラー共通の設定となります。

※バージョン1.2.0以降
$post protected array 読み取り専用のフィールドで、POSTパラメーターを配列で取得します。
$request->getPost()と同等です。
$query protected array 読み取り専用のフィールドで、GETパラメーターを配列で取得します。
$request->getQuery()と同等です。
$params protected array 読み取り専用のフィールドで、URIパラメーターを配列で取得します。
$request->getParams()と同等です。
$controller protected string 読み取り専用で、リクエストのコントローラーキーを取得します。
$request->getController()と同等です。

※バージョン1.2.0以降
$action protected string 読み取り専用で、リクエストのアクションキーを取得します。
$request->getAction()と同等です。

※バージョン1.2.0以降
$session protected Session 同一コントローラー内でのみ有効なセッションとしてのSessionクラスのインスタンスを取得します。
$request protected Request リクエスト情報を格納するRequestクラスのインスタンスを取得します。
読み取り専用フィールドです。
$view protected ViewStandardまたはViewSmarty ビュークラスのインスタンスを取得します。
読み取り専用です。
$validateRules protected array オートバリデート用の検証ルールを設定保持します。
ルールは、アクション→リクエスト変数のキー→ルールという階層の配列で指定指定します。
ルールの部分は検証内容を示すルールキーと、それに対するオプションで構成される配列です。
検証ルールとして指定できるルールキーには以下が存在します。

■required
 検証内容:必須入力

■length
 検証内容:最大文字列長
 オプション:max(最大桁数)

■length_range
 検証内容:文字列長範囲
 オプション:max(最大桁数) min(最小桁数)

■numeric
 検証内容:算術数値

■number_string
 検証内容:数字文字列(0~9)

■alpha
 検証内容:アルファベット

■alpha_num
 検証内容:アルファベット・数字文字列

■singlebyte
 検証内容:シングルバイト

■regex
 検証内容:正規表現
 オプション:pattern(正規表現パターン)


以下に指定例を示します。

$validateRules = array(
 'regist' => array(
  'name' => array(
   array('rule' => 'required'),
   array('rule' => 'length', 'max' => 30)
  ),
  'address' => array(
   array('rule' => 'required')
  ),
  'age' => array(
   array('rule' => 'required'),
   array('rule' => 'number_string')
  )
 )
);
$validator protected Validator リクエスト検証クラスのインスタンス。
別途、$validateRulesを設定しておくと、そのルールがあらかじめセットされた状態のバリデーターとして機能します。
$plugin protected Plugin コントローラーディレクトリ内にPluginクラスが存在する場合、そのインスタンスが格納されます。

※バージョン1.0.2以降
$response protected Response レスポンスクラスのインスタンス。
読み取り専用です。

※バージョン1.1.0以降
$dispatched public boolean アクションメソッドの実行が完了したか否か。
アクションメソッドの実行より前のタイミングでこのフィールドをtrueに設定するとアクションメソッドの実行がスキップされます。
またアクションメソッドの実行より前のタイミングでtransferメソッドにより、他のアクションメソッドを強制的に実行した場合は自動的にこのフィールドがtrueに設定され、本来のアクションメソッドは実行されません。

※バージョン1.1.0以降

メソッド

メソッド名 アクセス 概要
model public 引数で指定されたクラス名のモデルクラスのインスタンスを取得します。
通常は指定されたクラス名に対して、以下の条件を満たす場合、そのクラスのインスタンスを返します。

・モデル格納ディレクトリ内に名前規則に従ったモデルクラス定義ファイルが存在する
・そのファイル内に引数で指定された名前のクラスが定義されている
・Modelクラスを継承している

定義ファイルが存在しない場合、指定されたクラス名から命名規則によって導き出される、対応するテーブル名がセットされた状態でModelクラスのそのもののインスタンスが返ります。Curryではこれを空想モデルクラスと呼び、モデルクラスを定義しないでもテーブルアクセスが可能な仕組みになっています。詳しくはマニュアルを参照してください。

ただし、定義ファイルが存在するのに、中のクラス定義が正しくない場合は例外を発生します。
service public 引数で指定されたクラス名のサービスクラスのインスタンスを取得します。
正しくインスタンスが返るのは以下の条件をすべて満たす場合です。

・サービス格納ディレクトリ内に名前規則に従ったサービスクラス定義ファイルが存在する
・そのファイル内に、引数で指定された名前のクラスが定義されている
・Serviceクラスを継承している

以上の一つでも満たさない場合は例外を発生します。
preProcess public アクションメソッドの直前のタイミングで必ず呼び出されるメソッドです。コントローラー中のすべてのアクションメソッドに対して共通の前処理を行いたい場合などにこの名前でメソッドを作成するだけで実行されます。
postProcess public アクションメソッドの直後のタイミングで必ず呼び出されるメソッドです。コントローラー中のすべてのアクションメソッドに対して共通の後処理を行いたい場合などにこの名前でメソッドを作成するだけで実行されます。
redirect public サイト内の他のページへリダイレクトします。このメソッドでは他のドメインのサイトへのリダイレクトはできません。
transfer public リダイレクトは行わず、特定のアクションへ処理を委譲します。
アクションメソッド内でこのメソッドが呼び出された場合、指定されたアクションを実行した後、元のアクションメソッドの続きの処理が実行されます。
preProcessなど、アクションメソッドより前のタイミングで呼び出された場合は本来のアクションメソッドは実行されません。
output public ※バージョン1.3.0で削除されました。

コントローラークラスの最終処理として、ビュークラスによるHTMLの描画を行うメソッドです。通常はこのメソッドで自動的に描画処理を実行するため、このメソッドの存在を意識する必要はありませんが、描画処理を独自に実装したい場合はコントローラークラス内でこのメソッドをオーバーライドします。
getRequest public リクエスト情報を含んだRequestクラスのインスタンスを取得します。このインスタンスからはPOST・GETを始めとした様々なリクエスト情報を取得することができます。
コントローラークラス内では$this->requestとしても同じ働きをします。
Requestクラスの詳細はリファレンスを参照してください。
getView public ビュークラスのインスタンスを取得します。
コントローラークラス内では$this->viewとしても同じ働きをします。
initView public ※バージョン1.3.0で削除されました。

ビュークラスの初期化を行うメソッドです。
通常はこのメソッド内で自動的に初期化処理が行われるため、意識する必要はありませんが、ビュークラスの初期化処理を独自に行いたい場合はこのメソッドをオーバーライドします。
initValidator public リクエスト検証クラスの初期化を行うメソッドです。
通常はこのメソッド内で自動的に初期化処理が行われるため、意識する必要はありませんが、初期化処理を独自に行いたい場合はこのメソッドをオーバーライドします。
setAutoValidate public オートバリデートの有効・無効を設定します。
デフォルトではオートバリデートは無効になっています。
オートバリデートの実行タイミングはpreProcessなどよりも先になるため、有効にする場合はコントローラークラスのフィールド定義で対応するしかありません。
getEnv public Webサーバーの環境変数"APP_ENV"の値を取得します。
例えばApacheであればhttpd.confや.htaccessファイルなどで環境変数"APP_ENV"を定義し、その値をコントローラーで参照して環境によって処理を切り分けたいなどの事が可能です。

※バージョン1.4.12以降