Curry
PHP Framework

core

db

html

utility

RestController

クラス概要

RESTfulなリクエストに対応したコントローラークラスです。
Controllerクラスを継承しているため、ほとんどの処理は共通しますが、RESTに対応するための幾つかの機能が追加されています。

通常のコントローラーではアクション単位のメソッドとなりますが、RestControllerではアクション+HTTPメソッドの単位でアクションメソッドを定義します。
Curryで扱うHTTPメソッドはGET、POST、PUT、DELETEの4つのため、一つのアクションに対して最大4つのメソッドが定義できることになります。そのメソッド名は単純にアクションメソッド名の末尾にHTTPメソッド名を付加しただけのものです。ただしGETだけは末尾にGetは付けません。

GETのアクションメソッドについてはViewの仕組みを利用してテンプレートを出力しますが、状態変化系のメソッドといえるGET以外のアクションメソッドはそのままでは何もレスポンスを返しません。リダイレクトを行うなり、Responseクラスを利用してレスポンスを出力するなりの処理が必要になります。

Curry対応バージョン

バージョン 1.3.0 以降

クラスファイル位置

curry/core/rest_controller.php

フィールド

フィールド名 アクセス 概要
$autoRedirect public boolean POST、PUT、DELETEのアクションメソッドの処理後に自動的にGETへリダイレクトするか否かの設定を保持します。
デフォルトではfalseですが、trueに設定すると各アクションメソッドの処理後、同アクションのGETへ自動的にリダイレクトされます。リダイレクトのタイミングは、Pluginまでも含めたpostProcessよりも後になります。
$restParams public array リクエストのパラメーターを取得します。
RESTリクエストではHTTPメソッドごとにアクションメソッドがわかれるため、$_POSTや$_GETなどのような区分けがあまり意味をなしません。そのためRESTリクエストではHTTPメソッドにかかわらずこのrestParamsで一元的にパラメータを取得します。

メソッド

メソッド名 アクセス 概要
isAutoRedirect public オートリダイレクトが有効になっているか否かを確認します。

※バージョン1.3.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以降