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