エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


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情報を取得することができます。
 

// 実行関数
$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()」によって取得した情報を個別に取得する関数も用意されています。
 

// アクセスの 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の情報を取得することもできます。
 

// アクセスの 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の関連記事

CakePHPのpostlinkで生成した削除リンクをクリックしても処理が実行されない対処法
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」に関する記事一覧
 
 

 - CakePHP 3.x 4.x 5.x

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP3のメール送信の処理・テンプレート使用・添付ファイル送信も解説
CakePHP3のメール送信の処理・テンプレート使用・添付ファイル送信も解説

CakePHP3からメールを送信する方法解説。基本的な記述方法を基にして、テンプレートを使う方法、ファイルを添付する方法へと拡張しながら解説。

CakePHP 2.3 bakeの超初心者向けフォロー講座

CakePHP 2.3 bakeの超初心者向けフォロー講座

CakePHP 2.3 Search Pluginで検索処理 その4前方一致検索、後方一致検索、不等号による検索、between句による範囲検索

CakePHPの検索プラグイン Search Pluginの検索処理の中で前方一致検索、後方一致検索、不等号による検索、between句による範囲検索の解説です。

CakePHP3のHtmlHelperのLink設定のまとめ。mailto、URL、Root/Homeのリンクなども
CakePHP3のHtmlHelperのLink設定のまとめ。mailto、URL、Root/Homeのリンクなども

CakePHP3でHtmlHelperを使ってリンクの設定をする方法のまとめ。基本形からURLを指定、class、id、targetを指定、mailtoのリンク、画像をアンカーに、JavaScriptのダイアログなどの解説。

CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説
CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説

CakePHPのログ出力方法の解説。app.phpにログ設定をし、スコープやレベルを指定してログ出力を振り分ける方法、CakePHP4で配列出力にはvar_exportが必要なことなどを解説。

CakePHP3のCakeDC/Users、Authでログインなしでもアクセスを許可する設定
CakePHP3のCakeDC/Users、Authでログインなしでもアクセスを許可する設定

CakePHP3の Authコンポーネントや CakeDC/Usersプラグインなどを利用したユーザ管理・認証システムにおいて、ログインしていなくても見ることができるページの設定方法を解説。

CakePHP2の検索Plugin CakeDC/Searchで重複を省くgroup by(distinct)の実装方法
CakePHP2の検索Plugin CakeDC/Searchで重複を省くgroup by(distinct)の実装方法

CakePHP2の検索プラグイン「CakeDC/Search」で、重複レコードを省くgroup by、distinctを使う方法についての解説。設定する場所はpaginatorの条件とするので、find()関数と同じ。

CakePHP3のアソシエーション機能を使い関連レコードをまとめて削除

CakePHP3でレコードを削除する際に関連するレコードをまとめて削除する機能の解説。フレームワークのメリットを存分に発揮し、コマンドを1行追加するだけで実装可能。

CakePHP4から外部のデータベースにアクセスする方法解説
CakePHP4から外部のデータベースにアクセスする方法解説

CakePHP4のシステムから他のシステムのデータベースにアクセスをし、SQL文を実行する方法を解説。try-catchでエラーを取得する方法も解説。

CakePHPを学ぶ際にはオブジェクト指向を学ぼう

CakePHPはオブジェクト指向で書かれていますので、CakePHPを学ぶにはオブジェクト指向も学びましょう。