CakePHPのsetAction()とredirect()の違い

CakePHPでプログラムから特定のページに移動させるにはいくつかの方法があるみたいです。

それらのうち、CakePHPを勉強していてsetAction()とredirect()の違いを知ったので、今回はそのことについてのメモを書いておきます。

setAction()

$this->setAction( アクション名 );

setAction()は上記のように、コントローラのインスタンス($this)に対して使います。これはコントローラの親クラスであるAppControllerクラスに用意されているメソッドで、指定したアクションに移動するために使います。この移動はフォワードと呼ばれる種類のもので、たとえばHelloControllerというもののindexページからbyeというページに移動(フォワード)させたいとする場合には、URLがexample.com/helloというURLのままで、それがexample.com/hello/byeのようにはならないのです。

setActionによる移動はアクション名を指定することからもわかるとおり、コントローラ内に定義されているアクションへしか移動できないことを表しています。

redirect()

$this->redirect( 移動先アドレス );

上記のように使うredirectはsetActionとは違って、URLが異なる移動方法です。たとえば、先ほど紹介したHelloControllerのindexページからbyeというページに移動させたい場合のURLは、example.com/hello から example.com/hello/byeというものへ変更されます。

移動先のアドレスを指定することからもわかるように、redirectは別にコントローラ内に書かれているアクション先でなくても、別のサイトのアドレスも指定することができます。

2つの仕組みの違い

setAction()とredirect()の違いというのは、実に単純です。setAction()つまりはフォワードという移動はプログラムのサーバ内での処理によるものである一方で、redirect()という指定したアドレス先に移動するものは、ブラウザが持つ機能を利用しているにすぎないのです。

 

※参考

コントローラー - 3.10

コメント

タイトルとURLをコピーしました