CakePHPでリファラURL(直前のページのURL)を取得したいけど、$_SERVER['HTTP_REFERER']
を使うのはナンセンス。
CakePHPのControllerには referer
メソッドというのがあって、それを使えば $_SERVER['HTTP_REFERER']
を使うよりも断然便利なんです。
Controller::referer(mixed $default = null, boolean $local = false)
現在のリクエストに対するリファラ URL を返します。 $default パラメータは、 HTTP_REFERER がヘッダから読み取れなかった場合にデフォルト URL として使うために指定します。
Controller::referer – CakePHP Cookbook 2.x ドキュメント
このメソッドでリファラURLを返し、第1引数ではリファラがない場合のデフォルトURLが設定できるのです。もうこの時点で $_SERVER['HTTP_REFERER']
を使う理由はないですね。
もし第1引数の $default
がセットされていなければ、ドメインのルート '/'
をデフォルト値とします。
第2引数に true
を指定すると、refererメソッドによって返されるURLの相対指定が出来ます。
<?php
class UserController extends AppController {
public function delete($id) {
// リファラがあればパスが返る
$url = $this->referer(); => // 'http://*****/users/view'
// 文字列でデフォルトURLを直接指定
$url = $this->referer('/users/view');
// 配列でデフォルトURLのアクションを指定
$url = $this->referer(array('action' => 'index'));
// 第2引数にtrueを指定すると相対パスが返る
$url = $this->referer(null, true); // '/users/view'
$this->redirect($url);
}
}
これでリファラの取得はバッチリですね!
設定をうまく使って referer
メソッドを使いこなしましょう!!