エス技研

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


CakePHP3でDocumentRootやwebroot、imgフォルダのURLやドメイン、パスを取得

      2017/10/28

DocumentRootやwebroot、imgフォルダのURLやドメイン、パスを取得

 

CakePHP3では UrlHelperで取得するように変わった

 
CakePHP3でファイルのアップロード処理を自作・解説付き・その1」「CakePHP3で画像・ファイルのアップロード処理を自作・解説付き・その2」でファイルのアップロード処理を作りましたが、その際、アップロードした画像を表示するための画像のパスの取得方法についても調べましたので解説します。
 
 <img src=”【ここ部分のパス】/upload.jpg”>
 
また、取得方法は、CakePHP2では HtmlHelperを使用していましたが、CakePHP3では UrlHelperを使用するように変更になっていますので、CakePHP2の時の記述方法では動かなくなっています。
 
 

UrlHelperを使ってサイトの URLを取得する方法

 
UrlHelperを使ってフォルダのパス、URLを取得する方法を解説します。
UrlHelperを使うこの方法は、ビューでのみ使用可能です。
 

 
基本形がこの形です。
第 1引数に「”/”」を指定すると、ドキュメントルート(webroot)フォルダのパスが取得できます。
 
第 2引数に「true」を指定すると、URLが取得できます。
 例:http://example.com/
 

 
上記のように引数を指定することで、ドキュメントルート内の「images」フォルダのパスが取得できます。
また、引数内にディレクトリセパレーター「/」も含めると、ディレクトリセパレーターが付いたパスが取得できます。
 
 

 
第 1引数を与えない場合は、表示しているパス、URLを取得することができます。
第 1引数の記述方法は「""」「null」のいずれでも OKです。
 
 


 

Routerクラスを使ってサイトの URLを取得する方法

 
Routerクラスを使ってサイトの URLを取得する方法の解説です。
Routerクラスは、ビュー以外のコントロールやモデルなどで使用できます。
 
 
Routerクラスを使用する際は、まず最初に use句で使用を宣言します。

 

 
パスの取得方法は、上記の通りです。
UrlHelperも「Router::url()」クラスで取得する方法も、最終的には同じメソッドが呼び出されますので、引数の仕様は同じで、第 2引数に「true」を指定すると URLを取得することができます。
 
 

リクエストオブジェクトを利用してパスを取得する方法

 
今回の記事の趣旨とはやや違いますが、リクエストオブジェクトを使ってパスを取得する方法もあります。
リクエストオブジェクトからパスを取得する方法は、ビュー、コントローラーを問わず取得することができます。
 
ただし、取得できるのはリクエストに応じたパスですので、リクエストの URLに関係ないパは取得できませんし、URLも取得できません。
 
 
リクエストの URLが「/subdir/articles/edit/1?page=1」だとすると、それぞれ下記の情報を取得することができます。
 

 
 
この方法を利用して、下記の記述で webroot内にある「images」フォルダへのパスを生成することもできます。
 

 
 
CakePHP3.4.0以降は下記の様に記述するようです。

 
 
リクエストオブジェクトを利用したパス情報の取得方法は、下記のオフィシャルサイトに詳細があります。
https://book.cakephp.org/3.0/ja/controllers/request-response.html#id6
 
 

CakePHP3でのURLやドメイン、フォルダへのパスの取得のまとめ

 
CakePHP3では、URLやドメイン、フォルダへのパスの取得方法が変更になり、UrlHelperを使う方法、Routerクラスを使う方法になりました。
 
画像を表示するためのパスを取得する場合など、ビューの中で使う場合が多いと思いますので、UrlHelperを使う機会の方が多いと思いますが、この方法で取得が可能になります。
 
 
今回の解説は、表示の際に使用するパスの取得ですが、対して、ファイルアップロードの処理やエクセルファイルのダウンロード処理などを構築する際には、フォルダの絶対パスが必要になります。
そのようなフォルダのパスを表す定数についての記事は下記に書いていますので、あわせて参考にしてください。
 
 
 

CakePHP3の関連記事

CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールする
CakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3の1対多での連携を中間テーブルを使った多対多の連携に変更するときの手順
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
 
その他の「CakePHP3」に関する記事一覧
 
 

 - CakePHP 3.x 4.x

GoogleAdwords

GoogleAdwords

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

Message

メールアドレスが公開されることはありません。

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

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

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

  関連記事

CakePHP3の1対多での連携を中間テーブルを使った多対多の連携に変更するときの手順
CakePHP3の1対多での連携を中間テーブルを使った多対多の連携に変更するときの手順

CakePHP3で「1対多」の連携を中間テーブルを利用した「多対多」の連携に変更するときの手順のまとめ。中間テーブルの設定やModelの変更などを間違いやすい箇所を指摘しながらの解説。

CakePHP3でkeywords、DescriptionをHTMLヘルパーを使って設定する
CakePHP3でkeywords、DescriptionをHTMLヘルパーを使って設定する

CakePHP3のkeywordsとdescriptionを設定する方法の解説。CakePHP3にはmetaタグを編集するHTMLヘルパーが用意されているためそれを利用すればOK!ポイントはブロック化を有効にすること。

CakePHP3で「SQLSTATE[23000]: Integrity constraint violation」「SQLSTATE[42S22]: Column not found」などのエラーが出たときの確認するポイント
CakePHP3で「SQLSTATE[23000]: Integrity constraint violation」「SQLSTATE[42S22]: Column not found」などのエラーが出たときの確認するポイント

CakePHP3の開発で発生する「SQLSTATE[23000]: Integrity constraint violation」「SQLSTATE[42S22]: Column not found」のエラーには特有の原因もあるため、その説明と対処方法の解説。

CakePHP3の更新画面でUpload Plugin 3.0を使う方法、viewで使う方法解説・その3
CakePHP3の更新画面でUpload Plugin 3.0を使う方法、viewで使う方法解説・その3

CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその3で記事を更新する際のファイルの取り回しなどについてを解説。

CakePHP3でページごとに読み込むJavaScript、CSSを変える処理の解説
CakePHP3でページごとに読み込むJavaScript、CSSを変える処理の解説

CakePHP3でJavaScriptやCSSを編集する基本形から、それらやテンプレート(エレメント)を特定のテンプレートを読み込んだときのみ編集、実行するための方法、ブロック化について解説。

CakePHP3のビューで受取ったテーブルのオブジェクトを連想配列に変換する方法
CakePHP3のビューで受取ったテーブルのオブジェクトを連想配列に変換する方法

コントローラーからビューに送ったテーブルのオブジェクトを連想配列に変換し、ビューの中で自由に使えるようにするメソッド「toArray()」の解説。連想配列に変換できれば利用度アップ!

CakePHP3のdatetime型カラムの日時の扱い。秒まで正しく表示する方法
CakePHP3のdatetime型カラムの日時の扱い。秒まで正しく表示する方法

CakePHP3の日時カラムで秒まで扱う場合はdate()、strtotime()関数ではうまくいかない。CakePHP3であらかじめ用意された「i18nFormat()」を使用する。

CakePHP3のfriendsofcake/searchでブックマークチュートリアルのタグ検索を実装
CakePHP3のfriendsofcake/searchでブックマークチュートリアルのタグ検索を実装

CakePHP3のCookbookにあるブックマークチュートリアル。ここで紹介されているタグで検索する処理を検索プラグイン「friendsofcake/search」で実現する方法を解説しました。

CakePHP3のプラグイン「CakeDC/Users」を日本語化・翻訳ファイルもダウンロード可
CakePHP3のプラグイン「CakeDC/Users」を日本語化・翻訳ファイルもダウンロード可

CakePHP3のユーザ管理、ログイン認証プラグインである「CakeDC/Users」のメッセージを日本語にする手順の解説とともに、日本語の翻訳ファイルを提供。ファイルを設置すれば日本語になる!

CakePHP3のルーティング(routes.php)の変更が反映されない時はキャッシュのクリアを
CakePHP3のルーティング(routes.php)の変更が反映されない時はキャッシュのクリアを

CakePHP3でルーティングの設定変更をしたけど反映されない!そんなときは慌てず騒がずキャッシュをクリアしよう!ルーティングの設定もキャッシュされることがあるらしい。