CakePHPの通常のリクエストに伴うグローバル定数の設定の一般的な流れ図です。コンソールの場合は異なる流れになります。なお、PHPのバージョン差分を補完するための定義は割愛しています。

CakePHPの定数が定義される流れ

CakePHPの定数が定義される流れ。

 

index.php、bootstrap.php、basic.php の三か所で定義されます。このうちbasic.phpは時間処理のユティリティ定数です。index.php と bootstrap.php ではパス関連の定数が多く定義されています。

定義時に、定義済みチェックを行っているものとそうでないもの(図の赤い星マーク)とがあります。

定義済みチェックを行っているものに関して変更を加えたいという場合は、タイミング的には app/Core/bootstrap.php では遅く、コアファイルには触れないという原則に則れば、index.php で定義する以外は方法はなさそうです。

アセット系の似たような定数の違い

IMAGES と IMAGES_URL、CSS と CSS_URL、JS と JS_URL という似たような定数が定義されていますが、それぞれ前者はファイルシステム上の絶対パス、後者は単なるディレクトリの名称と言う違いがあります。直接ファイルを操作する場合とWeb上のパスとして出力する場合とで使い分けられているようです。

前者のディレクトリ絶対パスの定数はコアで使用している個所は非常に限られています。(JS が JsHelper::writeBuffer で使用されているのみ)

後者のURLディレクトリ名定数はHelperの継承クラスで多用されています。

アセット系のディレクトリ名(cssとかjsとか)を独自に定義する件

この記事を書く動機にもなったのですが、css や js といったアセット用のディレクトリ名を変更したい場合、どうすればよいのでしょうか?たしか、1.3系ではアセット系のディレクトリ名などは好きに付けれた気がするのだけど、2系になってからこの点での自由度は抑制されたようです。

一応、後者のURLディレクトリ名に関しては、bootstrap.php で定義する際に定義済みチェック( if(defined(‘…’) )を行っていますので、 index.php で独自に設定する余地があると言えばあります。が、絶対パス用の定数と整合性を取が取れなくなってしまうので、デフォルトのままがよさそうですねぇ。。。