Jump to the content

【CakePHP】現在のリクエストに対するリファラURLを取得する方法

PHP

    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 メソッドを使いこなしましょう!!

    注目記事

    最近の記事

    ぼくが書いてます

    フロントエンドエンジニア

    イソップ

    ページの先頭に戻る

    Search results

    ×