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 が標準で提供するものだけを使い、あとは上記の定数定義の方法を使ってカバーしよう。
アプリケーション全体から利用できる定数を定義したい場合などがそう。
で、それをどこに書けばいいのかが分からない。
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 が標準で提供するものだけを使い、あとは上記の定数定義の方法を使ってカバーしよう。