CakePHP 2.x で webroot の URL を取得する方法

この記事を読むのに必要な時間は約 5 分です。


CakePHP で、URL を扱う際に、CakePHP の Webroot の URL を取得したい場合があります。

 

例えば、アップロードされた画像を表示するために、img タグを出力する場合などがあります。

いくつか方法がありますので、ご紹介したいと思います。

 

[pn-box color=”lgray”]

CakePHP 関連記事は、以下よりご覧下さい。

tag : CakePHP

[pn-box-close]


cake-logo

 

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  > コントローラ > リクエストとレスポンスオブジェクト > CakeRequest > CakeRequest API > CakeRequest::$webroot

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]

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です