CakePHP3でユーザ定義の定数、変数を設定し、読み込む方法解説
2022/07/16
CakePHP3でユーザ定義の定数、変数を設定し、読み込む
CakePHP3でサイトの構築をする際に、プログラム全体で使用する定数や変数を設定し、それを呼び出す方法について解説します。
小規模なサイトであれば、定数、共通変数は「bootstrap.php」に書いていく方法があります。
ファイルを分ける必要もないため、シンプルな方法です。
その方法が「bootstrap.phpに変数を設定する方法」です。
ですが、サイトの規模が大きくなると、設定する定数、共通変数も多くなっていき、「bootstrap.php」が肥大化しますので、定数、共通変数は別のファイルに分けて設定する方法もあります。
その方法が「定数、変数を設定するファイルを別にする方法」です。
また、定数、変数を別ファイルにする方法は、もう一つやり方がありまして、それが「定数、変数を設定するファイルを別にする方法・その2」です。
CakePHP4で定数の設定と呼び出し方法の解説(defineとConfigure)
CakePHP4でユーザ定義の定数を設定する方法は、改めて上記に記事を書いていますので、こちらを参考にしてください。
CakePHP4と CakePHP3の設定方法の違いは、「bootstrap.php」に記述する場合は CakePHP3から変更はありませんが、別ファイルに定数を記述する場合は CakePHP3とは少し異なる部分があります。
bootstrap.phpに変数を設定する方法
「/app/Config/bootstrap.php」に定数、変数を設定
「/app/Config/bootstrap.php」に変数、および、定数を設定します。
1 2 3 4 5 6 7 8 9 10 11 |
// 定数の定義 define("TEST","定数テスト"); // 変数の定義 Configure::write("text1", "変数のテキスト"); // 配列の定義 Configure::write("array1", ["0"=>"配列0","1"=>"配列1"]); // 連想配列の定義 Configure::write("array2", ["a"=>"配列a","b"=>"配列b"]); |
定数を定義する「define()」関数は、PHPの標準関数をそのまま利用できます。
変数を定義する場合は、「Configure::write()」を利用します。
引数の 1つ目が「変数名」になり、2つ目がその変数に入れる値になります。
2つ目の引数に配列、連想配列を設定することで、定義する変数も配列、連想配列にすることができます。
配列を設定しているだけですので、下記のような記述の方法も可能です。
1 |
Configure::write("array2", array("0"=>"配列0","1"=>"配列1")); |
また、下記の様にまとめて複数の変数の設定をすることもできます。
1 2 3 4 |
Configure::write( [ "array1" => ["0"=>"配列0","1"=>"配列1"], "array2" => ["a"=>"配列a","b"=>"配列b"], ]); |
定数に配列を指定する(2019.03.16 追記)
PHP 5.6以降では定数に配列を設定することができるようになりましたが、「define()」で配列を指定できるのは PHP7以降からです。
そのため、PHPのバージョンが 7以降の場合は、CakePHP3でも下記の記述方法で定数として配列を指定することができます。
1 |
define("TEST_ARRAY", ["配列1","配列2","配列3"]); |
この記事では、
スカラー値(文字列、数値など)「define()」
配列は「Configure::write()」
のような記述の仕方をしていましたが、PHP7以降は、文字通り
定数は「define()」
変数は「Configure::write()」
で指定することになります。
設定した変数、定数を読み込む方法
定数として指定した情報を呼び出す場合は、呼び出すコントローラーの最初に「use」で「Configure」を呼び出します。
(定数だけを読み込む場合は、「use」の設定は必要ありません。)
1 |
use Cake\Core\Configure; |
各定数、変数を読み込む方法は、以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// 定数を読み込む echo TEST; //「定数テスト」と表示される // 定数を読み込む $getText1 = Configure::read("text1"); echo $getText1; //「変数のテキスト」と表示される // 配列を読み込む $getArray1 = Configure::read("array1"); echo $getArray1[0] //「配列0」と表示される // 連想配列を読み込む $getArray2 = Configure::read("array2"); echo $getArray2["a"] //「配列a」と表示される |
変数は、view側ではそのままは使えませんが、定数は view側でも直接呼び出して使用することができます。
つまり、定数は、テンプレートファイルに下記の様に記述することで、直接呼び出すことができます。
1 2 |
// 定数を読み込む echo TEST; //「定数テスト」と表示される |
定数、変数を設定するファイルを別にする方法
続いて、定数、変数を「bootstrap.php」ファイル以外の別ファイルに設定する方法を解説します。
「/app/Config/const.php」ファイルを作成し、定数、変数を設定
「/app/Config/」フォルダの中に「const.php」ファイルを新規作成します。
(ファイル名は「const.php」にしていますが、ファイル名の決まりはありませんので、自由なファイル名にしてください。)
作成したファイルに下記を記述します。
1 2 3 4 5 6 7 8 9 10 |
<?php use Cake\Core\Configure; return [ // 定数の定義 define("TEST","定数テスト"), // 変数の定義 Configure::write("text1", "変数のテキスト"), ]; |
ここで設定する定数、変数は、「return」の引数として配列で指定します。
そのため、定数、変数の指定行は配列の値となりますので、それぞれの行の終わりは、「;」ではなく「,」で区切ります。
配列で指定しますので、下記の様に記述しても問題ありません。
1 2 3 4 5 6 7 |
return array( // 定数の定義 define("TEST","定数テスト"), // 変数の定義 Configure::write("text1", "変数のテキスト"), ); |
ちなみに「return」の記述を忘れた場合は、「Config file "const.php" did not return an array
」というエラーが表示されます。
また、ファイルの最初に「use Cake\Core\Configure;
」を記述します。
この記述は忘れがちなので、忘れないようにしましょう。
記述を忘れた場合は「Error: Class 'Configure' not found
」というエラーメッセージがでますので、記述忘れに気づかないことはありませんが...
「/app/Config/bootstrap.php」に定数ファイルを読み込む設定
設定した「const.php」ファイルを、「bootstrap.php」に読み込む設定を記述します。
「/app/Config/bootstrap.php」に下記を記述します。
1 |
Configure::load("const"); |
記述する場所は分かりやすく「bootstrap.php」ファイルの一番最後などに記述しても OKですが、「bootstrap.php」の 75行目辺りから始まる、他のファイルもロードしている処理に追記する方がより良いでしょう。(下記 5行目、6行目を追加しています。)
1 2 3 4 5 6 7 8 9 10 |
try { Configure::config('default', new PhpConfig()); Configure::load('app', 'default', false); // 定数ファイルを読み込み Configure::load("const"); } catch (\Exception $e) { exit($e->getMessage() . "\n"); } |
「/app/Config/bootstrap.php」には、デフォルトで「use Cake\Core\Configure;
」は記載されていますので、改めて追記する必要はありません。
設定した変数、定数を読み込む方法
設定した変数、定数を読み込む方法は、先の「bootstrap.phpに変数を設定する方法」と同じですので、ほぼコピペになりますが以下のようになります。
定数として指定した情報を呼び出す場合は、呼び出すコントローラーの最初に「use」で「Configure」を呼び出します。
1 |
use Cake\Core\Configure; |
各定数、変数を読み込む方法は、以下のようになります。
1 2 3 4 5 6 |
// 定数を読み込む echo TEST; //「定数テスト」と表示される // 定数を読み込む $getText1 = Configure::read("text1"); echo $getText1; //「変数のテキスト」と表示される |
定数、変数を設定するファイルを別にする方法・その2
定数、変数を「bootstrap.php」ファイル以外の別ファイルに設定する方法のその2を解説します。
この方法は、CakePHP2のころも利用できた方法です。
「/app/Config/const.php」ファイルを作成し、定数、変数を設定
「/app/Config/」フォルダの中に「const.php」ファイルを新規作成します。
(ファイル名は「const.php」にしていますが、ファイル名の決まりはありませんので、自由なファイル名にしてください。)
作成したファイルに下記を記述します。
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php // 定数の定義 define("TEST","定数テスト"); // 変数の定義 $config['text1'] = "変数のテキスト"; // 配列の定義 $config['array1'] = array("0"=>"配列0","1"=>"配列1"); // 連想配列の定義 $config['array2'] = array("a"=>"配列a","b"=>"配列b"); |
「/app/Config/bootstrap.php」に定数ファイルを読み込む設定
設定した「const.php」ファイルを、「bootstrap.php」に読み込む設定を記述します。
(この設定方法は、「定数、変数を設定するファイルを別にする方法」と同じです。)
「/app/Config/bootstrap.php」に下記を記述します。
1 |
Configure::load("const"); |
こちらも「定数、変数を設定するファイルを別にする方法」と同じく、「bootstrap.php」の 75行目辺りから始まる、他のファイルもロードしている処理に追記する方がより良いでしょう。(下記 5行目、6行目を追加しています。)
1 2 3 4 5 6 7 8 9 10 |
try { Configure::config('default', new PhpConfig()); Configure::load('app', 'default', false); // 定数ファイルを読み込み Configure::load("const"); } catch (\Exception $e) { exit($e->getMessage() . "\n"); } |
設定した変数、定数を読み込む方法
設定した変数、定数を読み込む方法も、「定数、変数を設定するファイルを別にする方法」と同じですので、ほぼコピペになりますが以下のようになります。
定数として指定した情報を呼び出す場合は、呼び出すコントローラーの最初に「use」で「Configure」を呼び出します。
1 |
use Cake\Core\Configure; |
各定数、変数を読み込む方法は、以下のようになります。
1 2 3 4 5 6 |
// 定数を読み込む echo TEST; //「定数テスト」と表示される // 定数を読み込む $getText1 = Configure::read("text1"); echo $getText1; //「変数のテキスト」と表示される |
広く知られている方法は「その2」の方である
「その2」として紹介した方法が、多くのブログで紹介されている方法です。
ですが、「その2」の方法は、「bootstrap.php」に直接記述しても情報を取得することができず、また、「use Cake\Core\Configure;
」を記述していなかったことでうまく動作しませんでした。
そのため、エラーを解消するために調べたときに「その1(定数、変数を設定するファイルを別にする方法)」の方法に行きつき、先に「その1」の方の記事を書きました。
その後さらに調査した結果、「その2」も上記の手順であれば動作させることもできたため、「その2」の方法も記事に入れることにしました。
CakePHP3 オフィシャルサイト 環境変数
https://book.cakephp.org/3.0/ja/development/configuration.html#environment-variables
ただ、「その1(定数、変数を設定するファイルを別にする方法)」は、上記のオフィシャルサイトに記載されている方法に基づいて書いています。
CakePHP3では新しい仕組みも増えてきていますので、「その1」の方が活用用途は高いかもしれません。
CakePHP3の関連記事
CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールするCakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3の1対多での連携を中間テーブルを使った多対多の連携に変更するときの手順
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
その他の「CakePHP3」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
MySQL、CakePHP 2.3で「tinyint(1)」の Boolean型の動作を再確認
MySQL+CakePHPの環境で「tinyint(1)」を利用する際の動作を検証。「tinyint(1)」の Boolean型について CakePHPでは自動処理が実施されていることを確認しました。
-
CakePHP4のCakeDC/Usersの Usersへの接続、バリデーションのカスタマイズ方法解説
CakeDC謹製Usersプラグインの紹介。CakePHP4で使う場合のUsersのカスタマイズとして入力項目のバリデーションの変更を、プラグインのファイルは触らずオーバーライドにより実装する方法を解説する。
-
CakePHP 2.3 ログイン、操作履歴、アクセスログ出力
CakePHPでログインや操作履歴などのアクセスログ出力処理を作成します。
-
CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合の詳細ページの注意点
ID以外のカラムでアソシエーション(連携)させて詳細ページを表示させる際の考え方と注意点をサンプルソースを用いて解説しています。
-
CakePHP4 でコマンドプログラム(シェルプログラム)を作成する方法解説
CakePHP4でバッチ処理を行うためのコマンド・シェルの実装方法について解説。bakeでテンプレートファイルを作成し、「execute()」に処理を記述する方法を解説。
-
CakePHP4のFrozenDateで1ヵ月前、先月、今月1日、来月末の日付などを算出する方法
CakePHPには「FrozenDate」の日付を扱う関数が用意されている。これを利用して、1ヶ月後、月末日、月初日、5日後などを指定して日付を取得できる。それを解説。
-
CakePHP3の更新画面でUpload Plugin 3.0を使う方法、viewで使う方法解説・その3
CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその3で記事を更新する際のファイルの取り回しなどについてを解説。
-
CakePHP 2.3 bakeの超初心者向けフォロー講座
CakePHP 2.3 bakeの超初心者向けフォロー講座
-
CakePHP 2.3 Search Pluginで検索処理 その5入力項目に複数項目入力した場合の AND検索、OR検索
CakePHPの検索プラグイン Search Pluginの検索処理の中で複数項目を入力した場合の AND検索、OR検索についての解説です。
-
CakePHP3のUpload Plugin 3.0をバリデーションなど実運用向けのカスタマイズ方法解説・その2
CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその2でバリデーションなどの実用的なカスタマイズ方法を解説。