定数の定義・利用【CakePHP4】

ライブラリのパス等を、複数のコントローラーやその他ファイルで利用することがあると思います。

その際に、いちいちそれぞれのファイルで変数を定義するのは非効率ですし、コードがわかりづらくなる可能性もあります。

そこで、「定数を定義しよう」となるわけですが、実際にやろうと思った際に案外資料が発見できませんでした・・・。

そんなわけで、今回は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公式:構成設定

コメント

タイトルとURLをコピーしました