この記事を読むのに必要な時間は約 5 分です。
CakePHP で、URL を扱う際に、CakePHP の Webroot の URL を取得したい場合があります。
例えば、アップロードされた画像を表示するために、img タグを出力する場合などがあります。
いくつか方法がありますので、ご紹介したいと思います。
[pn-box color=”lgray”]
CakePHP 関連記事は、以下よりご覧下さい。
[pn-box-close]
webroot の URL を取得する方法
以下のいずれの方法でも可能です。
<?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 に記載されている、以下のグローバル定数などでは取得できません。
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;
公式ドキュメントへのリンク
[pn-box color=”lgray”]CakePHP Cookbook 2.x > コアライブラリ > ヘルパー > HtmlHelper > HhtmlHelper::url()
CakePHP Cookbook 2.x > 本格的な開発 > Routing > Router API > Router::url() (英語)
[pn-box-close]
ひとこと
以前、Upload プラグインについての記事を書いた際には、この方法を知らず、”../” を利用した無理やりな相対指定を行っていました。お恥ずかしいところです。
言われれば、”/” に対する URL を取得すれば、当 CakePHP アプリケーションのための webroot を補ってくれることは想像に難くないところです。ただ、Cookbook にも分かりやすく載せておいてもらえると助かるなぁ、と思いました。
[pn-cakephp-env]
今回は以上です。
[pn-amzn-cakephp]