ライブラリのパス等を、複数のコントローラーやその他ファイルで利用することがあると思います。
その際に、いちいちそれぞれのファイルで変数を定義するのは非効率ですし、コードがわかりづらくなる可能性もあります。
そこで、「定数を定義しよう」となるわけですが、実際にやろうと思った際に案外資料が発見できませんでした・・・。
そんなわけで、今回はCakePHPにおける定数の定義方法についてメモします。
概要
公式によると、下記のように記載されています。
『もしアプリケーションに多くの設定オプションがあるとき、設定を複数のファイルに分けることで役に立ちます。 config/ ディレクトリーに複数ファイルを作成したのち、 bootstrap.php でそれらを読み込めます。』
つまり、config以下に定義した内容を、最終的にはbootstrap.phpで読み込んでくれるということです。
なので、定数の定義は以下いずれか行えばいいでしょう。
①config/bootstrap.phpに直書きする。
②config/ 以下に任意のファイルを作ってそこに記載し、bootstrap.phpで読み込む。
定数の数が少数であれば①、数が多くて整理が大変そうであれば②、という感じでしょうか。
コード事例・解説
bootstrap.phpに記載する場合
定数の定義
//config/bootstrap.php
//通常の定数を定義
Configure::write("LibraryPath", "/home/path/to/library");
// 配列で定義
Configure::write("DemoArray", ["0"=>"value0","1"=>"value1"]);
Controllerから呼び出す
//src/SamplesController
namespace App\Controller;
use Cake\Core\Configure;
class SamplesController extends AppController
{
public function demo(){
//定数の読み込み
$path = Configure::read("LibraryPath");
$array = Configure::read("DemoArray");
$this->set(compact('path','array'));
}
}
読み込んでしまえば、普通に変数として使えます。
//templates/samples/demo.php
echo $path;
//"/home/path/to/library"
echo $array[0];
//"value0"
別のファイルに記載する場合
定数の定義
定数の数が多い場合や、整理のためにbootstrap.phpに記載したくない場合には、別途定数を定義するためのファイルを作ります。
config/以下に記載すればファイル名はなんでもよいようです。今回はconstant.phpというファイル名にします
//config/constant.php
return [
"LibraryPath" => "/home/path/to/library",
"DemoArray" => ["0"=>"value0","1"=>"value1"],
];
bootstrap.phpで設定
先ほどのファイルをbootstrap.phpで読み込みます。
//config/bootstrap.php
//デフォルトコードの80行目あたり。
try {
Configure::config('default', new PhpConfig());
Configure::load('app', 'default', false);
//この行を追記
Configure::load("constant");
} catch (\Exception $e) {
exit($e->getMessage() . "\n");
}
定数の読み込み
こちらはbootstrap.phpに定数を直書きするケースと同様です。
//src/SamplesController
namespace App\Controller;
use Cake\Core\Configure;
class SamplesController extends AppController
{
public function demo(){
$path = Configure::read("LibraryPath");
$array = Configure::read("DemoArray");
$this->set(compact('path','array'));
}
}
参考
・CakePHP4公式:構成設定
コメント