CakePHP4で「app_local.php」「.env」を利用して環境ごとの定数を振り分ける方法
2022/07/16
CakePHP4で「app_local.php」「.env」を利用して定数を定義する方法
CakePHP4では、
「app_local.php」ファイル
「.env」ファイル
にて定数を定義することができるようになっています。
この記事では、「app_local.php」「.env」で定数を定義する方法、呼び出す方法の解説をします。
ちなみに、「app_local.php」「.env」のいずれも、Gitでの管理対象にはしない設定になっています。
また、「CakePHP4の定数定義ファイルを環境変数によって本番と開発を振り分ける方法解説」では、定数を定義したファイルを「環境変数」を使用して「本番環境」と「開発環境」を振り分ける方法を解説していますので、併せて参考にしてください。
「app_local.php」を利用して定数を定義する方法
CakePHP4では、環境ごとに異なる定数を定義する「/config/app_local.php」と言うファイルが用意されています。
「app_local.php」ファイルには
デバッグモードの設定
salt
データベースの接続情報
SMTPの接続情報
が記載されています。
これらの情報は、CakePHP3の頃には「app.php」に記述していましたが、開発環境と本番環境とで異なる情報となりますので、CakePHP4では「app.php」と分けて管理することになっています。
(CakePHP3、CakePHP4をインストールし、DB接続情報などの設定する方法の解説などは「CakePHP3、CakePHP4のバージョンを指定してインストールする詳細な手順を解説」を参照してください。)
ここでは、その「/config/app_local.php」ファイルに開発者が独自に設定する定数を記載して管理する方法を解説します。
定数を別ファイルに指定して管理する方法については「CakePHP4で定数の設定と呼び出し方法の解説(defineとConfigure)」に詳しく記載しています。
その内容を理解している前提で話を進めさせていただきます。
「/config/app_local.php」ファイルに定数を定義する
まず、「/config/app_local.php」に記載する内容です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
'EmailTransport' => [ 'default' => [ 'host' => 'localhost', : 中略 : ], ], // 定数を指定する "AppLocalTest01" => "aaaaa01", // 配列を指定する "AppLocalTest02" =>[ "test01" => "aaaaa0201", "test02" => "aaaaa0202", ], // 定数を「AppLocalConst」にまとめる方法 "AppLocalConst" =>[ // users で使用する定数 "users" => [ "test01" => "users01", "test02" => "users02", ], // topics で使用する定数 "topics" => [ "test01" => "topics01", "test02" => "topics02", ], ], ]; |
上記の 10行目~31行目が追加した記述になります。
それぞれ、定数を指定する方法、配列を指定する方法、定数を「AppLocalConst」というひとまとめの定数で指定する方法などがあります。
「/config/app_local.php」に定義した定数を呼び出す
続けて、「/config/app_local.php」に記述した定数を呼び出す方法です。
「/config/app_local.php」に記載した定数を取得する場合は「Configure::read()
」を使用します。
下記は、定数を使用する Controllerに「initialize()」を追加してそこで呼び出す記述をしています。
Controller全体ではなく、特定の Actionのみで使用する場合は、Actionの中に同様の記述をしてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
public function initialize(): void { // 定数「AppLocalTest01」を呼び出す $appLocalTest01 = Configure::read("AppLocalTest01"); // 「AppLocalTest02」を配列として呼び出す $appLocalTest02 = Configure::read("AppLocalTest02"); // 配列「AppLocalTest02」内の「test01」を呼び出す $appLocalTest02test01 = Configure::read("AppLocalTest02.test01"); // 配列「AppLocalTest02」内の「test01」を呼び出す・その2 $appLocalTest02test01x = Configure::read("AppLocalTest02")["test01"]; // 配列「AppLocalConst」内の「topics」内の「test01」を呼び出す $topicsTest011 = Configure::read("AppLocalConst.topics.test01"); $this->set(compact( 'appLocalTest01', 'appLocalTest02', "appLocalTest02test01", "appLocalTest02test01x", "topicsTest011" )); } |
ちなみに、『配列「AppLocalTest02」内の「test01」を呼び出す』の「その2」の記述方法はむりやり感がありますが、「Configure::read("AppLocalTest02")
」の部分で配列を取得していますので、こんな記述方法も可能ではあります。
「.env」を利用して定数を定義する方法
「/config/.env」ファイルを使用して定数を指定する方法を解説します。
「.env」ファイルの使用できるようにする
デフォルトの設定では「.env」の内容を読み込める様になっていませんので、「.env」ファイルを使用できるようにします。
/config/bootstrap.php
の 63~69行目の下記の部分のコメント処理を外します。
1 2 3 4 5 6 7 |
if (!env('APP_NAME') && file_exists(CONFIG . '.env')) { $dotenv = new \josegonzalez\Dotenv\Loader([CONFIG . '.env']); $dotenv->parse() ->putenv() ->toEnv() ->toServer(); } |
「.env」ファイルの生成する
続けて「.env」ファイルを生成します。
CakePHP4では「/config/.env」ファイルはデフォルトでは用意されていませんので、「/config/.env.example」をコピペして「.env」ファイルを作成します。
また、「/config/.env」ファイルの 16~21行目の設定は不要ですので、コメントにしておきます。
「.env」ファイルでコメントにする場合は、行頭に「#
」を記述します。
「.env」ファイルに定数を定義する場合は、下記の様に「export」に続けて定義を記述します
1 2 3 |
export ENV_STR01="enviroment_string01" export ENV_STR02="enviroment_string02" export ENV_ARRAY="enviroment_array01,enviroment_array02,enviroment_array03" |
ちなみに、「.env」ファイルで設定できる定数は「文字列のみ」です。
そのため、配列を指定したい場合は、擬似的な対応となります。
「/config/.env」に定義した定数を呼び出す
「.env」ファイルに設定した定数を呼び出す場合は「env()」関数を使用します。
「env()」関数で呼び出す方法は、Controllerでも View(テンプレートファイル内)でも同じ記述で使用できます。
1 2 3 |
$env_str01 = env("ENV_STR01"); $env_str02 = env("ENV_STR02"); $env_array = explode(",",env("ENV_ARRAY")); |
また、「.env」ファイルに擬似的な配列を指定した場合は、上記のように「explode()」関数にて文字列を配列に分割して使用します。
(文字列の中に「,
」がある場合は、「,
」以外の区切り文字を使うといいでしょう。)
また、「.env」ファイルで定義した定数を、「env()」を使わずに定数として呼び出したい場合は、「/config/bootstrap.php」ファイルに下記の様に改めて定数として定義し直す方法があります。
1 2 3 |
define("ENV_STR01",env("ENV_STR01")); define("ENV_STR02",env("ENV_STR02")); define("ENV_ARRAY",explode(",",env("ENV_ARRAY"))); |
また、定数を別ファイルで定義する方法については「CakePHP4で定数の設定と呼び出し方法の解説(defineとConfigure)」に記事を書いていますので参考にしてください。
CakePHP4では「app_local.php」と「.env」のどちらを使う方がいい?
CakePHP4で定数を管理する場合
「/config/app_local.php」
「.env」
のどちらで定数を定義する方がいいか?
についてですが、「/config/app_local.php」の方がいいのであろうと思います。
そもそも、CakePHP4のデフォルトでは「.env」は用意されていませんし(「.env.example」は用意されていますが)、必要な処理はコメントアウトされており使用できるようになっていません。
CakePHP4の「.env」は、CakePHP3や他のフレームワークで「.env」ファイルを使用していた方に対して、CakePHP4でも同じ様な使用感で定数を定義するためのオプションなのだと考えています。
また、「.env」では配列を定義することができないために使い勝手がいいとは言えず、その点も含めて、「.env」より「app_local.php」を使う方がいいのだろうと思います。
ただ、「.env」は「.」で始まるファイルのため、セキュリティの点でちょっとだけ有利なのかも知れません。
ちなみに、「app_local.php」と「.env」は、基本的に Gitでは管理しないファイルとなっています。
理由は、データベースの接続情報やメールサーバへの接続情報などの機密情報を記載するファイルとなるためです。
そのため、この記事では「app_local.php」や「.env」で定数を管理する方法を紹介してはいるものの、開発者が独自に定義する定数は「app_local.php」「.env」には記載しない方がいいのだろうと思います。
環境ごとで変わる定数を管理する方法としては、「CakePHP4の定数定義ファイルを環境変数によって本番と開発を振り分ける方法解説」に書いている「環境変数」で定数を振り分ける方法をオススメします。
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP3でページごとに読み込むJavaScript、CSSを変える処理の解説
CakePHP3でJavaScriptやCSSを編集する基本形から、それらやテンプレート(エレメント)を特定のテンプレートを読み込んだときのみ編集、実行するための方法、ブロック化について解説。
-
-
CakePHP2の検索Plugin CakeDC/Searchで重複を省くgroup by(distinct)の実装方法
CakePHP2の検索プラグイン「CakeDC/Search」で、重複レコードを省くgroup by、distinctを使う方法についての解説。設定する場所はpaginatorの条件とするので、find()関数と同じ。
-
-
CakePHP4のCakeDC/Usersのログイン時のリダイレクトとユーザ権限管理の設定解説
CakeDC謹製UsersプラグインのCakePHP4版の紹介。ログイン認証後にリダイレクトする先の設定方法についての解説と実運用するために必要なコツを解説。便利な仕組みも仕様の理解があって初めてうまく使いこなせる。
-
-
CakePHP3のデバッグキット(DebugKit)を強制的に有効、無効に変更する方法
CakePHP3に付属しているデバッグのためのツール、デバッグキットを強制的に有効化、無効化する方法を解説。初期設定では開発環境としてありそうなドメインの場合のみ有効になるように設定されている。
-
-
CakePHPで favicon.icoやapple-touch-icon-144-precomposed.pngが could not be foundのエラーが出るときの対処方法
CakePHPで「CakeDC/Users」などルーティングを行うプラグインを利用するときに、favicon.icoやapple-touch-icon-144-precomposed.pngがNotFoundエラーになることがある。その対処方法の解説。
-
-
CakePHP3のfriendsofcake/searchでブックマークチュートリアルのタグ検索を実装
CakePHP3のCookbookにあるブックマークチュートリアル。ここで紹介されているタグで検索する処理を検索プラグイン「friendsofcake/search」で実現する方法を解説しました。
-
-
CakePHP3のタイムゾーンを協定世界時UTCから日本標準時間JSTにずれを変更する方法
CakePHP3の標準設定のタイムゾーンは「UTC(協定世界時)」に設定されている。これを日本標準時に変更する方法(app.php、bootstrap.phpの変更方法)の解説。
-
-
CakePHP3で保存前にバリデーション結果を取得する2つの方法
CakePHP3でデータベースに値を保存する前にバリデーションを行い、その結果によって処理を振り分ける方法について解説。「$topic->errors()」と「$topic->hasErrors()」の2つの方法がある。
-
-
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
CakePHP3でOGPを設定する方法を解説。fetch、assignを使用しレイアウトファイルに編集した変数にテンプレートファイルから値を指定する。これを利用してOGPを編集する。
-
-
CakePHP3でassociatedを使って関連データをまとめて保存する方法(hasOne、hasMany、belongsTo)
CakePHP3で関連データをまとめて保存する方法。hasOne、hasMany、belongsTo等の関連データはassociatedを追加することでまとめて保存することができます。