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';
}

?>	
  1. <?php
  2. # $name controller attribute usage example
  3. class RecipesController extends AppController {
  4. var $name = 'Recipes';
  5. }
  6. ?>

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');
}

?>   
  1. <?php
  2. class RecipesController extends AppController {
  3. var $name = 'Recipes';
  4. var $uses = array('Recipe', 'User');
  5. var $helpers = array('Html', 'Ajax');
  6. var $components = array('Session', 'Email');
  7. }
  8. ?>

これらの変数は継承した値とマージされるため、例えば 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';
    }
}

?>
  1. <?php
  2. # $layoutで他のレイアウトを使用するよう定義する。
  3. class RecipesController extends AppController {
  4. function quickSave() {
  5. $this->layout = 'ajax';
  6. }
  7. }
  8. ?>

$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']
  1. $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']
  1. $this->params['url']

リクエストされた現在のURLが、GET変数のキー-値のペアと共に入ります。例えば、/posts/view/?var1=3&var2=4というURLで呼ばれた場合、$this->params['url']の中身はこうなります。:

[url] => Array
(
    [url] => posts/view
    [var1] => 3
    [var2] => 4
)
  1. [url] => Array
  2. (
  3. [url] => posts/view
  4. [var1] => 3
  5. [var2] => 4
  6. )

3.5.2.4.9 data

$this->data
  1. $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'];

?>
  1. <?php
  2. // フォーム要素を作るのにFormHelperが使われています。:
  3. $form->text('User.first_name');
  4. // 表示されると次のようになります。:
  5. <input name="data[User][first_name]" value="" type="text" />
  6. // フォームがコントローラにPOSTで送信されると、
  7. // データは、$this->dataの中に入ります。
  8. //送信されたfirst nameはここにあります。:
  9. $this->data['User']['first_name'];
  10. ?>

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属性は、コントローラのページネーション(ページ送り)のデフォルト動作を設定するのに使用されます。これらの属性の詳細については、このマニュアルの後の項目を参照してください。