CakePHP4、5で$_SERVERと同じようにURIを取得する「getUri()」の紹介
2025/03/23
CakePHP4系、5系でRequestオブジェクトでは取得できないURI情報を取得する方法
「getParam('action')
で取得するアクション名は別関数に移動しても不変」
上記の記事で、CakePHP4系、CakePHP5系で実行しているコントローラー、アクション名を取得する方法について解説しました。
「$this->request->getParam('controller')
」「$this->request->getParam('action')
」は、Requestオブジェクトの情報を取得していますので、アクセスした後のプログラム内での処理によって変化する情報ではありません。
ルーティングの設定によって、アクセスする URLと実行するコントローラー、アクションが異なっていても、実際にアクセスするコントローラー、アクション名が取得されます。
というのが、記事の概要です。
この記事では、「じゃぁ、URL(URI)の方の情報を取得するときはどうするの?」という解説を行います。
CakePHP4系、CakePHP5系で URI情報は関数「getUri()」で取得する
CakePHP4系、CakePHP5系では「getUri()」という関数が用意されています。
この「getUri()」を使用することでアクセスの URI情報を取得することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// 実行関数 $this->request->getUri(); // 実行結果 Laminas\Diactoros\Uri Object ( [allowedSchemes:protected] => Array ( [http] => 80 [https] => 443 ) [scheme:Laminas\Diactoros\Uri:private] => http [userInfo:Laminas\Diactoros\Uri:private] => [host:Laminas\Diactoros\Uri:private] => example.com [port:Laminas\Diactoros\Uri:private] => 80 [path:Laminas\Diactoros\Uri:private] => /sample/test01/1 [query:Laminas\Diactoros\Uri:private] => aaa=111 [fragment:Laminas\Diactoros\Uri:private] => [uriString:Laminas\Diactoros\Uri:private] => ) |
URI情報を個別に取得する関数も用意されている
上記のように「getUri()」を実行すると、URI情報がまとめて取得できます。
CakePHPでは、これに加え、「getUri()」によって取得した情報を個別に取得する関数も用意されています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// アクセスの URL // http://example.com/sample/test01/1?aaa=111 // 「/sample/test01/1」を取得 $this->request->getUri()->getPath(); // 「80」を取得 $this->request->getUri()->getPort(); // 「aaa=111」を取得 $this->request->getUri()->getQuery(); // 「example.com」を取得 $this->request->getUri()->getHost(); // 「http」を取得 $this->request->getUri()->getScheme(); |
PHPにはURI情報を取得する「$_SERVER
」が用意されている
そもそもの話ですが、PHPにはサーバ情報、環境情報は「$_SERVER
」に入っていますので、下記のように PHPの標準処理を利用して URIの情報を取得することもできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// アクセスの URL // http://example.com/sample/test01/1?aaa=111 // 「/users/menu/1?aaa=111」を取得(「getPath()」とは値が異なる) $_SERVER["REQUEST_URI"]; // 「80」を取得 $_SERVER["SERVER_PORT"]; // 「aaa=111」を取得 $_SERVER["REDIRECT_QUERY_STRING"]; // 「example.com」を取得 $_SERVER["SERVER_NAME"]; // 「http」を取得 $_SERVER["REQUEST_SCHEME"]; |
「getPath()」など、取得できる情報が少し異なる場合もありますが、取得できる情報は「$_SERVER
」の方が多様ですので、CakePHP独自の「getPath()」を使用する必要があるのか、という疑問はありますね。
PHPオフィシャル $_SERVER
https://www.php.net/manual/ja/reserved.variables.server.php
CakePHP5の関連記事
CakePHP4、5のユーザ認証でID、PASS以外の削除フラグなども条件加える方法CakePHP4、CakePHP5系の認証処理でログインの有無の確認、ユーザ情報の取得の方法
CakePHP4、5で$_SERVERと同じようにURIを取得する「getUri()」の紹介
getParam('action')
で取得するアクション名は別関数に移動しても不変CakePHP4系、CakePHP5系のexists()でカラムを指定して値の有無をチェックする方法解説
CakePHP4、5のnewEmptyEntityで作成したオブジェクトは空なのか、確認してみた
CakePHP4、5でSELECT telephone as tel FROM usersの様にasでカラムに別名を付ける方法
CakePHP4、5の認証処理で認証が通らない際の確認方法と確認箇所の紹介
CakePHP5系で認証機能のAuthenticationプラグインをインストール・エラー発生注意
CakePHP5でヘルパーから他のヘルパーを読み込む方法・CakePHP4からの変更点
その他の「CakePHP5」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP3で他のテーブルのマスタテーブルからセレクトボックス(プルダウンリスト)を作る
他のテーブルのマスタのレコードからプルダウンリストを作成し、選択できるようにするサンプルプログラムと解説。ORMの設定によりデータベースの値を取得し、配列を作成し optionsに与える。
-
-
CakePHP 2.3 Search Pluginで検索処理 その4前方一致検索、後方一致検索、不等号による検索、between句による範囲検索
CakePHPの検索プラグイン Search Pluginの検索処理の中で前方一致検索、後方一致検索、不等号による検索、between句による範囲検索の解説です。
-
-
CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合
ID以外のカラムでアソシエーション(連携)させるための考え方とサンプルソースを用いての説明を行っています。
-
-
CakePHP4のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakeDC謹製Usersプラグインの紹介。ユーザ新規登録の流れを紹介しつつ、テンプレートファイル、設定情報ファイルの場所とそれらをカスタマイズする方法を説明します。
-
-
CakePHP4で現在処理しているコントローラー名、アクション名を取得する方法
CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法を解説。複数の方法があるが、getParam()メソッドを使う方法が汎用性があって便利かも。
-
-
Windows上のXAMPP環境のCakePHPのコマンド実行時に環境変数を指定する方法
CakePHP4のコマンド(シェル)に対して、環境変数を指定して実行する方法を解説。LinuxとWindows上のXAMPPとでは記述方法が異なるため、Windowsのsetコマンドについても詳細解説。
-
-
CakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介
CakePHP3でレコードを追加、更新(Insert、Update)する記述方法を解説。1件ずつ処理、全件をまとめて処理、条件に該当する複数件のレコードを処理方法をサンプルコードを用いて解説。
-
-
CakePHP3で値を入力直後にバリデーションする方法解説
CakePHP3でバリデーションの実行を保存する時から入力情報を受け取るときに変更する処理の解説。CakePHP3ではnewEntity()の処理でバリデートするため1行追加で対応可能。
-
-
CakePHP3チュートリアルで日付と時刻のDateTimeでエラーが出たときの対処方法
CakePHP3のブックマークチュートリアルには記載ミスもあり、そのまま動かない個所もある。CakePHP3では namespaceを使うようになったので、classを呼び出すときに¥を追加する必要が!
-
-
CakePHP4で複数の引数(パラメータ)を付与してコマンドを実行する方法
CakePHP4でコマンドを実行する際に引数(パラメータ)をコマンド内で受け取る処理について解説。複数個の引数にも対応する記述方法も解説。