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のルーティング(routes.php)の変更が反映されない時はキャッシュのクリアを
CakePHP3でルーティングの設定変更をしたけど反映されない!そんなときは慌てず騒がずキャッシュをクリアしよう!ルーティングの設定もキャッシュされることがあるらしい。
-
-
CakePHP5系でDeprecatedを回避しfindListでキーと値のカラムを指定して取得する方法
CakePHP4のfindListでキーと値のカラムを指定してテーブルにアクセスする方法がCakePHP5では「Deprecated(非推奨)」となった。推奨の記述方法を解説。
-
-
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でCSVファイルをアップロードしレコードを追加、更新する処理の作成方法の解説。モデルとは直接関連しないフォームからCSVファイルをアップロードするため汎用的に使用可能。
-
-
CakePHP3でシェルを作成しコマンドラインから実行・CakePHP2との違い
CakePHP3のシェルスクリプトを作成し、コマンドラインから実行する方法を解説。複数単語をつなげる場合の対応方法がCakePHP2より制限が厳しくなったのでCakePHP3の命名規則の確認が必要だ。
-
-
CakePHP3にWYSIWYGエディタのCKEditor4を設置、カスタマイズ方法を解説
WYSIWYGエディタであるCKEditor4をCDNを利用して簡単にCakePHP3に導入する方法とカスタマイズする方法を解説。CakePHP3にはページごとの振り分けを行うブロック化を利用する。
-
-
CakePHP4のFrozenDateで1ヵ月前、先月、今月1日、来月末の日付などを算出する方法
CakePHPには「FrozenDate」の日付を扱う関数が用意されている。これを利用して、1ヶ月後、月末日、月初日、5日後などを指定して日付を取得できる。それを解説。
-
-
VirtualBoxにCakePHP3を設置。必要なCentOS、Apache、PHP、MySQL、Composerをインストールし設定する
VirtualBoxにCentOS、Apache、MySQL、PHPをインストールするところから初めてCakePHP3の開発環境を構築する手順を詳細解説。この記事1つで全ての設定が完了する。
-
-
CakePHP4のクリエビルダーを使用してOR条件をAND条件でつなぐSQL文を作る方法
CakePHP4のクリエビルダーを使って複数のOR条件をANDでつなぐSQL文を作成する方法を解説。OR条件を記述したwhere句を2つつなげて記述する。
-
-
URL短縮サービス「TTTオンライン(https://ttt.onl)」公開
URL短縮サービス「TTTオンライン(https://ttt.onl)」を公開。メールやSNSでは使いにくい長いURLを短いURLに変換するサービス。QRコードも。Google URL Shortenerが2019年3月にサービス終了。
-
-
CakePHP4、5の認証処理で認証が通らない際の確認方法と確認箇所の紹介
CakePHP4、5系の認証処理でログイン認証が通らない場合の確認方法、確認箇所を解説。ログ出力し、ステータスを確認するが、ステータスの内容も紹介。それはそのままusernameを変更する際のポイントでもある。