この記事を読むのに必要な時間は約 4 分です。
CakePHP で、URL を扱う際に、CakePHP の Webroot の URL を取得したい場合があります。
例えば、アップロードされた画像を表示するために、img タグを出力する場合などがあります。
いくつか方法がありますので、ご紹介したいと思います。
CakePHP 関連記事は、以下よりご覧下さい。
webroot の URL を取得する方法
以下のいずれの方法でも可能です。
1 2 3 4 5 6 |
<?php echo $this->webroot ; // Controller でも View でも利用可能 echo $this->request->webroot ; // Controller でも View でも利用可能 echo $this->Html->url( "/" ); echo Router::url( "/" ); ?> |
例えば、http://www.example.com/hoge/fuga/cake/ を webroot として設置した場合、Posts コントローラの index アクションが、http://www.example.com/hoge/fuga/cake/Posts/index という URL になります。
上記コードでは、いずれも /hoge/fuga/cake/ を出力します。
どれを使うか
特別な事情がなければ、View で使うことが多いかと思いますので、HtmlHelper::url() を利用する $this->Html->url( “/” ) を使うのが、汎用的に色々と使えて良いかと思います。
これらは使えません
公式 Cookbook に記載されている、以下のグローバル定数などでは取得できません。
1 2 3 4 5 6 7 8 9 10 |
echo Config::read("App.cssBaseUrl") ; // "css/" になります。 echo Router::fullbaseUrl() ; // "http://www.example.com" になります。 echo Config::read("App.imageBaseUrl") ; // "img/" になります。 echo Config::read("App.jsBaseUrl") ; // "js/" になります。 // 以下は全て URL ではなくディレクトリのフルパスを出力します。 echo APP ; echo WWW_ROOT ; echo IMAGES ; echo JS; |
公式ドキュメントへのリンク
CakePHP Cookbook 2.x > コアライブラリ > ヘルパー > HtmlHelper > HhtmlHelper::url()
CakePHP Cookbook 2.x > 本格的な開発 > Routing > Router API > Router::url() (英語)
ひとこと
以前、Upload プラグインについての記事を書いた際には、この方法を知らず、”../” を利用した無理やりな相対指定を行っていました。お恥ずかしいところです。
言われれば、”/” に対する URL を取得すれば、当 CakePHP アプリケーションのための webroot を補ってくれることは想像に難くないところです。ただ、Cookbook にも分かりやすく載せておいてもらえると助かるなぁ、と思いました。
[動作確認環境]
- PHP : 5.6.9
- CakePHP : 2.6.4
- MySQL : 5.6.24
今回は以上です。