core
db
html
utility
Controller
クラス概要
コントローラークラスはリクエスト情報を直接処理し、モデルやビューを制御します。
リクエストに対してはURIに含まれるコントローラー、アクションのキーを元にルーティングが行われ、処理対象とするコントローラークラス・アクションメソッドが決まり、実行されます。
そこまでの処理はフレームワークによって行われるため、実装者にとってはアクションメソッドが処理の起点となります。
そのため、コントローラークラスは実装者がインスタンスを生成してメソッドを実行するという性質のものではなく、特殊なクラスと言えます。
このようなコントローラーとしての機能を持たせるクラスは必ずControllerクラスを継承します。
そしてコントローラーディレクトリ内にControllerを継承したクラスを定義します。コントローラーディレクトリはデフォルトでは"app/controllers/"です。
実装方法は実装者の自由ですが、MVCの観点からはコントローラーはモデルやビューの制御に徹するのが良いでしょう。システムのメインとなるロジックを記述すべきではありません。そのようなロジックはモデルに記述し、コントローラーはそのメソッドを呼び出す程度にとどめます。
リクエストに対しては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以降 |