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

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

五十川 洋平(Yohei Isokawa)

五十川 洋平(Yohei Isokawa)

フロントエンドエンジニア/面白法人カヤックなどのWeb制作会社に勤務したのち、故郷の新潟に戻り独立。JSフレームワークAngularやFirebase、Google Cloud Platformを使ったWebアプリ開発が得意。 また、Udemyのプログラミング解説の講師、writer.appの自主開発や上越TechMeetupの主催などを行っています。

プロフィール

©Copyright 2022 Yohei Isokawa All Rights Reserved.