|
重要 |
|---|---|
|
このセクションでは、Cake のコントローラでよく使用する関数について扱いますが、完全なリファレンスが http://api.cakephp.org にあります。利用してください。 |
set($var, $value);string $var;mixed $value;
この関数は、コントローラからビューにデータを渡すもっとも主要な方法です。一つの値、配列全体など、どんなものでも渡すことができます。set() で1度設定すると、ビューの中で変数が使用できるようになります。コントローラで set('color', 'blue') を実行すると、ビューの中で、 $color 変数が使用できるようになります。
validateErrors();;
保存に失敗時に、エラーの数を返します。
validate();;
モデルのバリデーションルールに基づいて、モデルのデータを検証します。バリデーションについては、 "データバリデーション"の章を参照してください。
render(
|
||
| $action, | ||
| $layout, | ||
$file); |
|
$action;
|
|
$layout;
|
|
$file;
|
render によってビューが呼ばれます。コントローラのアクションの最後に render が自動的に呼ばれ、アクション名に基づいてビューが自動的に render (表示)されるので、この関数を使用することはそれほど多くないかもしれません。また別のやり方として、コントローラロジックのどの時点であっても、ビューの表示用にこの関数を呼ぶこともできます。
redirect($url);string $url;
この関数で、移動するべき場所を指定できます。 Cake の内部 URL か、完全な URL (http://...) を指定できます。
flash(
|
||
| $message, | ||
| $url, | ||
$pause); |
|
$message;
|
|
$url;
|
|
$pause;
|
この関数は、
$message (メッセージ)を $pause 秒だけ、 flash レイアウトの中で(
app/views/layouts/flash.thtmlで定義されます。)表示し、その後、ユーザの指定する
$url にリダイレクトします。
Cake のコントローラには幾つかのコールバックがあり、コントローラの重要な関数の前後にロジックを挿入することができます。この機能を使用するには、コントローラの中でこれらの関数を定義してください。
beforeFilter();;
コントローラアクション前に毎回、呼ばれます。アクティブなセッションのチェックや、役割(権限)チェックなどに活用できます。
afterFilter();;
コントローラのアクション後に毎回、呼ばれます。
beforeRender();;
コントローラのロジックが終わり、ビューが render (表示)される直前に呼ばれます。
これらは Cake のオブジェクトクラスの関数ですが、コントローラ内でも使用できます。
requestAction($url, $extra);string $url;array $extra;
この関数は、どんな場所からもコントローラのアクションを呼ぶことができ、render されたビューを返します。 $url は、 Cake URL (/controllername/actionname/params) で指定します。 $extra 配列の中に 'return' キーが含まれている場合、 コントローラアクションのために、AutoRender が自動的に true に設定されます。
requestAction を使用すると、他のコントローラアクションからデータを取得したり、あるコントローラから完全に render されたビューを取得したりできます。
まず、データは、コントローラからシンプルな方法で取得できます。
// シンプルなコントローラ:
class UsersController extends AppController
{
function getUserList()
{
return $this->User->findAll();
}
}
このシステムのユーザ一覧を表示するシンプルなテーブルを作成する必要があるとします。別のコントローラで同じコードを繰り返すのではなく、requestAction() を使って UsersController::getUserList() からデータを取得できます。
class ProductsController extends AppController
{
function showUserProducts()
{
$this->set('users', $this->requestAction('/users/getUserList'));
// ビューの $users 変数には、
// UsersController::getUserList() からのデータが入る
}
}
固定表示ではない element (要素)がたびたび必要になる場合、 requestAction() を使用してビューの中に注入(インジェクト)できます。単にデータを UsersController::getUserList で受け取るだけでなく、そのアクションの中で render されたビュー(テーブルの形になっているもの)を付け取りたいとしましょう。そうすれば、コードを繰り返さなくてすみます。
class ProgramsController extends AppController
{
function viewAll()
{
$this->set('userTable', $this->requestAction('/users/getUserList', array('return')));
// このアクションのビューの中から $userTable を呼び出して
// /users/getUserList で利用できる表示ビューと同じものを echo できます。
}
}
requestAction() を使用して呼ばれたアクションは、空の layout を使って render されることに注意してください。これにより、layout の中に layout が表示される危険を心配する必要がありません。
requestAction() 関数は AJAX を用いる際にも便利です。AJAX 更新の前、またはその最中に、小さなビューの要素を出力することができます。
log($message, $type
= LOG_ERROR);string $message;int $type
= LOG_ERROR;
WEB
アプリケーションの中で起こる様々な出来事を、この関数で記録(log)することができます。Log
は、Cake の
/tmp
ディレクトリの中にあります。
$type が PHP の定数の LOG_DEBUG と同じ場合、デバッグメッセージとしてログに記録されます。その他のタイプのものは、エラーとして記録されます。
// コントローラ内部では log() で項目を書き込めます:
$this->log('緊急!緊急!');
//ログエントリ:
06-03-28 08:06:22 Error: 緊急!緊急!
$this->log(" {$_SESSION['user']} がログインしました。", LOG_DEBUG);
//ログエントリ:
06-03-28 08:06:22 Debug: ボビーがログインしました。
postConditions($data);array $data;
$this->data に渡せるメソッドで、モデルの conditions 配列を戻します。
例えば、 person の検索フォームがあるとします:
// app/views/people/search.thtml:
input('Person/last_name'); ?>
この要素をフォームで送信すると、 $this->data 配列には次のように返ってきます:
Array
(
[Person] => Array
(
[last_name] => アンダーソン
)
)
この時点で、 postConditions() を使って、データをモデル内で使用できるようにフォーマットできます:
// app/controllers/people_controller.php:
$conditions = $this->postConditions($this->data);
// 次のような配列を生成します。
Array
(
[Person.last_name] => アンダーソン
)
// これをモデルの find 操作でこのように使用できます:
$this->Person->findAll($conditions);