くまきち

山と旅と家族が大事。
でも激しい物欲が理性と財布のタガを飛ばす
最近は自転車も乗ってる

CakePHP:定数はどこに書けばいいのか

2009-04-26 12:25:19 | SEまわり
CakePHP で独自の定数を使いたい場合がある。

アプリケーション全体から利用できる定数を定義したい場合などがそう。

で、それをどこに書けばいいのかが分からない。

config/core.php に書いても有効だが、core.php はフレームワークの設定を書くべきなので、アプリケーションの定数は別のところ、できるなら、独自のファイルに記述するべきだろう。

で、下記を参考にした。


CakePHP関西勉強会終了しました&発表資料 | Shin x blog



どうやら、bootstrap.php から読み込ませるのが適当なようだ。

標準(bake しただけの状態をこう呼んでみる)では、config/bootstrap.php にはコードはなにもなくて、コメントがずらっとあるだけ。

これを、次のようにする。

<?php
 config('constants');
?>

config() 関数は、basics.php 中に定義があり、引数に列挙された値に '.php' 拡張子を付けて、config ディレクトリ中から探して読み込む。

これで、フレームワークの処理の先頭で config/constants.php が読み込まれるようになるから、あとはそのファイルの中で define() で定数を定義してあげれば良い。


次は、グローバル変数の定義をどうするかだ。
上記 constants.php に普通に変数を書いただけでは当然ダメ。
一応やってみたんだけど、undefined value になる。 スコープがあるから当たり前と言えば当たり前。 フロントコントローラか呼ばれてる時点で気付いてもよさそうだが…>おれ

グローバル変数を、あるメソッドから参照する場合は、global コマンドを使えば出来るが、ローカルスコープからグローバルスコープな変数の定義をする方法って、そんなのないような気がするし、あってはいけない気がする。

これも一応試してみた。
constants.php 中で、変数を定義しておいて、bootstrap.php で、global 宣言をしておいてから、var_dump() すると、undefined なエラーは出ないが、中身は NULL だ。

この挙動はおもしろいが、調べるのは後回しにする。
とりあえず、グローバル変数はあとで混乱しやすいので、Cake が標準で提供するものだけを使い、あとは上記の定数定義の方法を使ってカバーしよう。

最新の画像もっと見る