今回はCakePHPのControllerでreferer(前のページのURL)を取得する方法についてご紹介します。
ピュアのPHPだと$_SERVER[‘HTTP_REFERER’]で取得できますが、CakePHPではControllerの関数で取得することができます。
CakePHPで関数で取得する場合はリファラのURLが取れなかった時に、代わりとなるURLを指定しておくことができます。
通常の$_SERVER[‘HTTP_REFERER’]を使うよりもメリットが多いので積極的に使っていきましょう。
Controllerで前のページのURLを取得する
CakePHPでrefererを取得するにはControllerのreferer関数を使用します。
Controller::referer(mixed $default = null, boolean $local = false)
現在のリクエストに対するリファラURLを返します。 $default パラメータは、HTTP_REFERERがヘッダから読み取れなかった場合にデフォルトURLとして使うために指定します。
第一引数はrefererが取れなかった場合に代わりとなるURLを指定できます。
Router::urlで使える配列形式で指定し、自動生成してくれます。
第二引数はtrueを指定すると相対パスを返すようになります。
実際にコードを見てみましょう。
class TestController extends AppController { public function index() { // 前のURLをフルパスで取得 $url = $this->referer(); // 前のURLを相対URLで取得 $url = $this->referer(null, true); // リファラが取れない場合はeditアクションのURLを返す $url = $this->referer(array('action' => 'edit')); $this->redirect($url); } }
以上になります。
開発の時にrefererを取ることはよくあると思います。
引数を理解し、有効活用していきましょう!
コメント