3.5.3.4.6 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));
    }
}
  1. // controllers/comments_controller.php
  2. class CommentsController extends AppController {
  3. function latest() {
  4. return $this->Comment->find('all', array('order' => 'Comment.created DESC', 'limit' => 10));
  5. }
  6. }

上記の関数を呼び出す簡単なエレメントを作成するには:

// views/elements/latest_comments.ctp

$comments = $this->requestAction('/comments/latest');
foreach($comments as $comment) {
    echo $comment['Comment']['title'];
}
  1. // views/elements/latest_comments.ctp
  2. $comments = $this->requestAction('/comments/latest');
  3. foreach($comments as $comment) {
  4. echo $comment['Comment']['title'];
  5. }

どこにでもエレメントを設置することができます。出力を取得して使用します:

echo $this->element('latest_comments');
  1. echo $this->element('latest_comments');

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

echo $this->element('latest_comments', array('cache'=>'+1 hour'));
  1. echo $this->element('latest_comments', array('cache'=>'+1 hour'));

requestAction の呼び出しは、キャッシュされたエレメントのビューファイルが存在し有効である間は生成されなくなります。