Help us understand the problem. What is going on with this article?

コントローラ>ビューとの連携

More than 3 years have passed since last update.
<?php

$data = array(
    'color' => 'pink',
    'type' => 'sugar',
    'base_price' => 23.95
);

//make $color, $type, and $basePrice
//available to the view:

$this->set($data);

・パラメータ属性($params)
コントローラパラメータは、CakePHPコントローラ内で$this->paramsとして利用できます。この変数で、現在のリクエストに関する情報にアクセスできます。$this->paramsの使い方としては、POSTやGET操作でコントローラに渡された情報へのアクセスにいちばんよく使われます。

form
$this->params['form']

$_FILES 内の情報も含めた、すべてのフォームからのすべてのPOSTデータがここに入ります。

・flash
flash(string $message, string $url, integer $pause)

redirect()と同様に、flash()メソッドも、何らかの操作を行った後に、ユーザへ新しいページを表示するために使います。flash()メソッドは、別のURLへ移る前にメッセージを表示するところが異なります。

第1引数は、表示するメッセージです。そして、第2引数はCakePHP流の相対URLです。CakePHP は、$pause(第3引数) 秒間、$messageを表示します。

ページ遷移後のメッセージ表示については、SessionComponent クラスの setFlash() メソッドを参照ください。

・コールバック
CakePHP のコントローラは、コールバックを使うとアクション実行の前後にロジックを挿入できます。

beforeFilter()

・paginate
このメソッドを使用すると、モデルからペジネートする結果を取得します。ページサイズ・モデルの find 条件などが指定できます。詳細やペジネートの使用方法については、pagination セクションを見てください。

・requestAction
requestAction(string $url, array $options)

この関数は、なんらかのロケーションを使用してコントローラのアクションを呼び出し、そのアクションの実行結果のデータを返します。$url に渡すのは CakePHP の相対 URL (/controllername/actionname/params) です。受信コントローラのアクションに特別なデータを渡すには、 $options 配列に追加します。

オプションに ‘return’ を渡すことで requestAction() を使用して、完全にレンダリングされたビューを取得することができます。: requestAction($url, array('return'));

キャッシュを使わずに requestAction を使用すると、パフォーマンスが悪くなります。まれにコントローラやモデルで使用することが適切な場合があります。

requestAction は(キャッシュされた)エレメントとともに使用されることが一番多いです。- レンダリングする前にエレメント用のデータを取り出すために使用されるからです。レイアウト内で “latest comments” エレメントを設置する例を見てみましょう。初めにデータを返すコントローラの関数を作成する必要があります。

// controllers/comments_controller.php
class CommentsController extends AppController {
function latest() {
return $this->Comment->find('all', array('order' => 'Comment.created DESC', 'limit' => 10));
}
}
上記の関数を呼び出す簡単なエレメントを作成は次のように行います:

// views/elements/latest_comments.ctp

$comments = $this->requestAction('/comments/latest');
foreach($comments as $comment) {
echo $comment['Comment']['title'];
}
どこにでもエレメントを設置することができます。出力を取得して使用します:

echo $this->element('latest_comments');
このように記述すると、エレメントがレンダリングされるときはいつでも、リクエストが生成されコントローラにデータが渡されます。データは処理されてから返されます。しかし、不必要な処理を防ぐためにエレメントのキャッシュを使用することが重要であることに注意してください。エレメントの呼び出しを変更することによって次のようになります。:

echo $this->element('latest_comments', array('cache'=>'+1 hour'));
requestAction の呼び出しは、キャッシュされたエレメントのビューファイルが存在し有効である間は生成されなくなります。

さらに、requestAction は Cake 流儀の URL に基づいた配列も扱えるようになりました。

echo $this->requestAction(array('controller' => 'articles', 'action' => 'featured'), array('return'));
これにより requestAction の呼び出しが Router::url を使用しないため、パフォーマンス向上が図れます。URL に基づいた配列は、一つの点を除き HtmlHelper::link で使用する配列と同じです。もし名前つきの引数もしくはpassed引数を使用する場合は、これらを第二引数に正しいキーでラップして渡さなければなりません。これは、requestAction が名前つきの変数を、Controller::params にまとめるだけで、名前つきの変数を ‘named’ キーに位置づけないからです。

echo $this->requestAction('/articles/featured/limit:3');
echo $this->requestAction('/articles/view/5');
これらを requestAction へ配列で渡すには、次のようにします。:

echo $this->requestAction(array('controller' => 'articles', 'action' => 'featured'), array('named' => array('limit' => 3)));
echo $this->requestAction(array('controller' => 'articles', 'action' => 'view'), array('pass' => array(5)));
文字列の URL と類似した配列を利用するほかの場所と違い、requestAction はこれらを異なるものとして扱います。

requestAction() に URL を配列で渡す場合、全ての パラメータを要求するアクションに定義する必要があります。これには、$this->data と $this->params['form'] を含みます。加えて全ての必要なパラメータを渡すには、namedとpassパラメータは上記で見られるような二つ目の配列で渡されている必要があります、

loadModel
loadModel(string $modelClass, mixed $id)

loadModelはコントローラのデフォルトのモデル、または関連付けられていないモデルを使う必要があるときに手軽なメソッドです。

$this->loadModel('Article');
$recentArticles = $this->Article->find('all', array('limit' => 5, 'order' => 'Article.created DESC'));
$this->loadModel('User', 2);
$user = $this->User->read();

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away