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を使ったほうがよさそうです。