[CakePHP] 別のコントローラにあるアクションを利用する方法

CakePHPで開発をしていると、別のコントローラのアクションを実行したいと思うことがあります。
CakePHP2xでは2つの方法が用意されています。

App::importを使う場合

今回は「Posts」コントローラーで「Users」コントローラーの「index」アクションを使うことを想定します。
まず、コントローラーファイルの一番上で下記のように使いたいコントローラーを読み込みます。

App::import("Controller", "Users");

次に「Posts」コントローラーのtestアクションに以下のように記載します。

//PostsコントローラーのtestアクションでUsersコントローラのindexアクションを呼び出す
function test() {
    $UsersController = new UsersController;
    $data = $HogesController->index(変数,配列);
}

indexの後の()の中はパラメタの指定になります。
下記のような設定が可能です。
index($id,$name,$url)→元のアクションで設定されている変数を入力
index(‘1′,’24’)→数字や文字列
index(array(1,2).array(3,4))→配列を指定

requestAction

書式
requestAction(string $url, array $options)

requestActionは任意の場所からコントローラのアクションを呼び出して、アクションからのデータを返します。

実際の利用例としてはコントローラ名:PostsController、アクション名:test() の場合は $this->requestAction(‘posts/test’,’params’) になります。

パラメータの指定は配列でも可能になっています。

$this->requestAction(
  array(
    'controller' => 'controllername',
    'action' => 'actionname',
  ),
  array(
    'pass' => array('params')
  )
);

こちらの方法は配列にパラメタを利用できないようなので、App::importを使ったほうがよさそうです。



Author: webmaster