3.5.2 コントローラの属性
コントローラの属性の完全な一覧とその説明は、CakePHP API を参照してください。http://api.cakephp.org/1.2/class_controller.html にあります。
3.5.2.1 $name
PHP4のユーザは、$name属性を使ってコントローラを定義するところからはじめてください。$name属性には、コントローラ名を設定します。通常、これはコントローラが使用する主要モデルの複数形になります。これにより、PHP4のクラス名の不思議な扱いに対応でき、CakePHPが名前を解決できるようにします。
<?php
# $name controller attribute usage example
class RecipesController extends AppController {
var $name = 'Recipes';
}
?>
<?php# $name controller attribute usage exampleclass RecipesController extends AppController {var $name = 'Recipes';}?>
3.5.2.2 $components、$helpers、$uses
次によく使われるコントローラ属性は、CakePHPに現在のコントローラが、どんなヘルパー、コンポーネント、モデルを使用するのかを伝える属性です。これらの属性により、MVCの各クラスをクラス変数として(例えば、$this->ModelNameとして)利用できるようになります。
各コントローラは、デフォルトでいくつかのクラスを利用できるようになっています。ですから、コントローラにまったく設定を追加しなくてよい場合もあります。
コントローラは、主要モデルにはデフォルトでアクセスできます。RecipesControllerは、デフォルトで、Recipeモデルに$this->Recipeという仕方でアクセスでき、ProductsControllerも$this->Productという形でProductモデルを使うことができます。
Html 、 Form 、 Session ヘルパーは、デフォルトで利用することができます。これらのクラスに関する詳細は、マニュアルの後の章を参照してください。
CakePHPのコントローラに、使用する追加のMVCクラスをどのように設定するのかを見てみましょう。
<?php
class RecipesController extends AppController {
var $name = 'Recipes';
var $uses = array('Recipe', 'User');
var $helpers = array('Html', 'Ajax');
var $components = array('Session', 'Email');
}
?>
<?phpclass RecipesController extends AppController {var $name = 'Recipes';var $uses = array('Recipe', 'User');var $helpers = array('Html', 'Ajax');var $components = array('Session', 'Email');}?>
これらの変数は継承した値とマージされるため、例えば Form ヘルパーや App controller で宣言したものを、もう一度宣言する必要はありません。
3.5.2.3 ページに関連した属性:$layoutと$pageTitle
CakePHPのコントローラー内には、レイアウト(layout)の中にビューをどうセットするかを制御する属性が、いくつかあります。
$layout属性には、/app/views/layouts内に保存されているレイアウトの名前を設定できます。$layoutの中に、レイアウトのファイル名から、.ctpという拡張子を除いたものを設定してください。この属性が定義されていない場合、CakePHPはデフォルトのレイアウトを表示(render)します。もし/app/views/layouts/default.ctpがない場合には、CakePHPのコアに含まれるデフォルトのレイアウトが表示されます。
<?php
# $layoutで他のレイアウトを使用するよう定義する。
class RecipesController extends AppController {
function quickSave() {
$this->layout = 'ajax';
}
}
?>
<?php# $layoutで他のレイアウトを使用するよう定義する。class RecipesController extends AppController {function quickSave() {$this->layout = 'ajax';}}?>
$pageTitleというコントローラーの属性を使うと、描画するページのタイトル(title)を設定できます。これが正しく動作するには、レイアウトの中、HTMLドキュメントの<title>タグの間に$title_for_layoutという変数を入れておく必要があります。
$pageTitleに、ドキュメントの<title>に表示させたい文字列を設定してください。
3.5.2.4 パラメータ属性($params)
コントローラパラメータは、CakePHPコントローラ内で$this->paramsとして利用できます。この変数で、現在のリクエストに関する情報にアクセスできます。$this->paramsの使い方としては、POSTやGET操作でコントローラに渡された情報へのアクセスにいちばんよく使われます。
3.5.2.4.1 form
$this->params['form']
$_FILES 内の情報も含めた、すべてのフォームからのすべてのPOSTデータがここに入ります。
3.5.2.4.2 admin
$this->params['admin']
現在のアクションを admin ルーティングを通して実行する場合、1 をセットします。
3.5.2.4.3 bare
$this->params['bare']
現在のlayoutが空なら1、そうでなければ0が入ります。
3.5.2.4.4 isAjax
$this->params['ajax']
現在のリクエストが Ajax によるものなら1、そうでなければ0が入ります。この変数は、コントローラで RequestHandler コンポーネントが使用されている場合のみ、設定されます。
3.5.2.4.5 controller
$this->params['controller']
リクエストを扱っている現在のコントローラ名が入ります。例えば、 /posts/view/1 がリクエストされた場合、 $this->params['controller'] は"posts"になります。
3.5.2.4.6 action
$this->params['action']
リクエストを扱っている現在のアクション名が入ります。例えば、 /posts/view/1 がリクエストされた場合、 $this->params['action'] には"view"が入ります。
3.5.2.4.7 pass
$this->params['pass']
$this->params['pass']
現在のリクエストで渡された、GETクエリの文字列が入ります。例えば、/posts/view/?var1=3&var2=4がリクエストされた場合、$this->params['pass']は"?var1=3&var2=4"になります。
3.5.2.4.8 url
$this->params['url']
$this->params['url']
リクエストされた現在のURLが、GET変数のキー-値のペアと共に入ります。例えば、/posts/view/?var1=3&var2=4というURLで呼ばれた場合、$this->params['url']の中身はこうなります。:
[url] => Array
(
[url] => posts/view
[var1] => 3
[var2] => 4
)
[url] => Array([url] => posts/view[var1] => 3[var2] => 4)
3.5.2.4.9 data
$this->data
$this->data
は、FormHelperのフォームからコントローラに送られた、POSTデータを扱うのに用いられます。
<?php
// フォーム要素を作るのにFormHelperが使われています。:
$form->text('User.first_name');
// 表示されると次のようになります。:
<input name="data[User][first_name]" value="" type="text" />
// フォームがコントローラにPOSTで送信されると、
// データは、$this->dataの中に入ります。
//送信されたfirst nameはここにあります。:
$this->data['User']['first_name'];
?>
<?php// フォーム要素を作るのにFormHelperが使われています。:$form->text('User.first_name');// 表示されると次のようになります。:<input name="data[User][first_name]" value="" type="text" />// フォームがコントローラにPOSTで送信されると、// データは、$this->dataの中に入ります。//送信されたfirst nameはここにあります。:$this->data['User']['first_name'];?>
3.5.2.4.10 prefix
$this->params['prefix']
ルーティングのプリフィックスをセットします。たとえばこの属性はリクエストに文字列 "admin"を含む場合 /admin/posts/someaction にルーティングします。
3.5.2.4.11 named
$this->params['named']
Stores any named parameters in the url query string in the form /key:value/. For example, if the URL /posts/view/var1:3/var2:4 was requested, $this->params['named'] would be an array containing:
[named] => Array
(
[var1] => 3
[var2] => 4
)
3.5.2.5 その他の属性
APIの中にすべてのコントローラ属性の詳細があるのでそこを参照できますが、このマニュアルの中にも、他のコントローラの属性に関する説明がいくつかあります。
$cacheAction属性は、ビューのキャッシュに役立ちますし、$paginate属性は、コントローラのページネーション(ページ送り)のデフォルト動作を設定するのに使用されます。これらの属性の詳細については、このマニュアルの後の項目を参照してください。
