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でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングをする方法を解説。インストール方法、読み込み方法。および、具体的なスクレイピングを実行するサンプルソースも。
-
-
CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法
CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法を解説。複数の方法があるが、getParam()メソッドを使う方法が汎用性があって便利かも。
-
-
CakePHP3でアソシエーション先のカラムでデータをソートして取得したい
アソシエーション先のテーブルのカラムをキーにソートをしたデータを取得したい!ときの記述方法を解説。「orderAsc()」ではなく「contain()」の中にSort条件を記述する。
-
-
CakePHP3のOGPはHTMLヘルパーの$this->Html->meta()を使って設定
CakePHP3でOGPを設定する方法を解説。metaタグを編集するHTMLヘルパーを利用してOGPのタグを編集する。また、エレメントとして分割することでメンテナンス性も向上させる。
-
-
CakePHP3のcontroller内でテンプレート、レイアウトを変更する際の指定方法
CakePHP3でテンプレートファイルやレイアウトファイルをデフォルトのものから別のものに変更したい場合の指定方法を解説。
-
-
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
CakePHP4でテーブルの数値項目に対してlike句を使用した部分一致検索を実行するとエラーが発生する。クリエービルダーの不具合だと思われ対処方法が分からない。
-
-
CakePHP3、CakePHP4のキャッシュをクリアする方法「bin/cake cache clear_all」を使う
CakePHP3、CakePHP4では処理を高速化する手法の一つとしてキャッシュを利用している。しかし、その情報は元の情報を更新しても反映されない場合がある。そんなときはキャッシュを削除する必要がある。
-
-
CakePHP3のCakeDC/Usersのログイン後のリダイレクトとユーザ権限管理の設定解説
CakeDC謹製Usersプラグインの紹介。ログイン認証後にリダイレクトする先の設定方法についての解説と実運用するために必要なコツを解説。便利な仕組みも仕様の理解があって初めてうまく使いこなせる。
-
-
CakePHP4のFrozenDateで1ヵ月前、先月、今月1日、来月末の日付などを算出する方法
CakePHPには「FrozenDate」の日付を扱う関数が用意されている。これを利用して、1ヶ月後、月末日、月初日、5日後などを指定して日付を取得できる。それを解説。
-
-
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
CakePHP3でパンくずの指定方法の解説。2つのヘルパーがあるが簡単なHTMLヘルパーを使った方法を、実際の状況に合わせて3つのパターン(エレメント化、ブロック化)にして解説。