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 2 3 4 5 |
// ドキュメントルートを取得 echo $this->Url->build("/"); // URLとして取得 echo $this->Url->build("/",true); |
基本形がこの形です。
第 1引数に「”/”」を指定すると、ドキュメントルート(webroot)フォルダのパスが取得できます。
第 2引数に「true」を指定すると、URLが取得できます。
例:http://example.com/
1 2 3 4 5 |
// image フォルダのパスを取得 echo $this->Url->build("/images"); // image フォルダのパスを取得(ディレクトリセパレーター付き) echo $this->Url->build("/images/"); |
上記のように引数を指定することで、ドキュメントルート内の「images」フォルダのパスが取得できます。
また、引数内にディレクトリセパレーター「/」も含めると、ディレクトリセパレーターが付いたパスが取得できます。
1 2 3 4 5 |
// 現在の URLを取得 echo $this->Url->build(); // 現在の URLを取得 echo $this->Url->build("",true); |
第 1引数を与えない場合は、表示しているパス、URLを取得することができます。
第 1引数の記述方法は「""
」「null」のいずれでも OKです。
Routerクラスを使ってサイトの URLを取得する方法
Routerクラスを使ってサイトの URLを取得する方法の解説です。
Routerクラスは、ビュー以外のコントロールやモデルなどで使用できます。
Routerクラスを使用する際は、まず最初に use句で使用を宣言します。
1 |
use Cake\Routing\Router; |
1 2 3 4 5 |
// ドキュメントルートを取得 $path = Router::url("/"); // URLとして取得 $path = Router::url("/",true); |
パスの取得方法は、上記の通りです。
UrlHelperも「Router::url()」クラスで取得する方法も、最終的には同じメソッドが呼び出されますので、引数の仕様は同じで、第 2引数に「true」を指定すると URLを取得することができます。
リクエストオブジェクトを利用してパスを取得する方法
今回の記事の趣旨とはやや違いますが、リクエストオブジェクトを使ってパスを取得する方法もあります。
リクエストオブジェクトからパスを取得する方法は、ビュー、コントローラーを問わず取得することができます。
ただし、取得できるのはリクエストに応じたパスですので、リクエストの URLに関係ないパは取得できませんし、URLも取得できません。
リクエストの URLが「/subdir/articles/edit/1?page=1」だとすると、それぞれ下記の情報を取得することができます。
1 2 3 4 5 6 7 8 |
// 「/subdir/articles/edit/1?page=1」を取得する echo $this->request->here(); // 「/subdir/」を取得する echo $this->request->webroot; // 「/subdir」を取得する(ディレクトリセパレーターがない) echo $this->request->base; |
この方法を利用して、下記の記述で webroot内にある「images」フォルダへのパスを生成することもできます。
1 |
$this->request->webroot . "images/"; |
CakePHP3.4.0以降は下記の様に記述するようです。
1 2 3 4 5 |
// 「/subdir/」を取得する echo $this->request->getAttribute("webroot"); // 「/subdir」を取得する(ディレクトリセパレーターがない) echo $this->request->getAttribute("base"); |
リクエストオブジェクトを利用したパス情報の取得方法は、下記のオフィシャルサイトに詳細があります。
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」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP3のビューで受取ったテーブルのオブジェクトを連想配列に変換する方法
コントローラーからビューに送ったテーブルのオブジェクトを連想配列に変換し、ビューの中で自由に使えるようにするメソッド「toArray()」の解説。連想配列に変換できれば利用度アップ!
-
-
CakePHP3でファイルのアップロード処理を自作・解説付き・その1
CakePHP3でファイルをアップロードする処理を、php.netにある「エラーを起こさない」と説明がある処理を参考に作成。サンプルソースとその解説付きで、コピペでも動くし、カスタマイズも簡単!
-
-
CakePHP3で値を入力直後にバリデーションする方法解説
CakePHP3でバリデーションの実行を保存する時から入力情報を受け取るときに変更する処理の解説。CakePHP3ではnewEntity()の処理でバリデートするため1行追加で対応可能。
-
-
CakePHP3で /Layout/defult.ctpにある titleタグ、h1タグを編集する方法
CakePHP3でtitleタグ、h1タグのテキストをデフォルトから変更する方法を解説。テンプレートファイルに「$this->assign()」でテキストを指定して「/Layout/defult.ctp」で受け取る。
-
-
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3で Insert … On Duplicate Key Update構文(upsert)を実行する方法を解説。バルク処理の方法も用意されているため大量処理の場合も対応可能。
-
-
cakephp3 カスタムバリデーションを簡易的に実装する方法
CakePHP3の独自のバリデーションをテーブルクラス内に簡単に記述する方法を解説。他のテーブルクラスでは使えないが、記述する量は少なく実装できるため、他で使わない処理を書くのには便利。
-
-
CakePHP3にデザインテンプレートBootstrapを導入する方法・friendsofcake/bootstrap-ui使用
CakePHP3にプラグイン「friendsofcake/bootstrap-ui」、デザインテンプレート「Bootstrap」を設置する手順を解説。Bootstrapの簡単な使い方やデフォルトのデザインとの混在方法なども解説。
-
-
CakePHP3で生の SQLの実行はConnectionManagerを使う
CakePHP3で生の SQL文を実行する方法を解説。クリエビルダーを使う場合は TableRegistryを利用するが、SQLを実行する場合は ConnectionManagerを使う。プリペアードステートメントの使用方法も解説。
-
-
CakePHP 2.3 Search Pluginで検索処理 その4前方一致検索、後方一致検索、不等号による検索、between句による範囲検索
CakePHPの検索プラグイン Search Pluginの検索処理の中で前方一致検索、後方一致検索、不等号による検索、between句による範囲検索の解説です。
-
-
CakePHP3でアソシエーション先のカラムでデータをソートして取得したい
アソシエーション先のテーブルのカラムをキーにソートをしたデータを取得したい!ときの記述方法を解説。「orderAsc()」ではなく「contain()」の中にSort条件を記述する。