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
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP 2.3 テーブルの項目を演算した結果を条件として抽出する方法
アソシエーション(連携)している先のテーブルの項目で演算をする場合の考え方と注意点をサンプルソースを用いて説明しています。分かってしまえば簡単です。
-
-
CakePHP3のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakeDC謹製Usersプラグインの紹介。ユーザ新規登録の流れを紹介しつつテンプレートファイルがどこにあるか、設定情報ファイルがどこにあるか、を説明しつつカスタマイズの方法を解説します。
-
-
CakePHP 2.3 Search Pluginで検索処理 その6ORDER、sortソートの機能
CakePHPの検索プラグイン Search Pluginの検索処理の中で order、ソートについての解説です。
-
-
CakePHP3のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説・3.6以降対応
CakePHP3のユーザ管理プラグイン Usersは、ユーザ登録、メール認証、ログイン認証、ユーザ管理、権限管理、reCAPTCHAなど会員制のサイトを簡単に実現可能。その導入方法、カスタマイズ方法を解説。
-
-
CakePHP3でファイルのアップロード処理を自作・解説付き・その1
CakePHP3でファイルをアップロードする処理を、php.netにある「エラーを起こさない」と説明がある処理を参考に作成。サンプルソースとその解説付きで、コピペでも動くし、カスタマイズも簡単!
-
-
CakePHP4で「app_local.php」「.env」を利用して環境ごとの定数を振り分ける方法
CakePHP4で.env、app_local.phpに定数を定義してそれを呼び出す方法の解説。Gitでは管理せず本番環境と開発環境とで異なる定数を定義するためそれを利用する方法。
-
-
CakePHP4の定数定義ファイルを環境変数によって本番と開発を振り分ける方法解説
CakePHP4で開発環境と本番環境とで違う設定ファイルを読み込ませて環境ごとに定数を切り替える方法を解説。Apacheのhttpd.confに環境変数を設定しそれを読み込み判別する。
-
-
CakePHP3、CakePHP4、CakePHP5のバージョンを指定してインストールする詳細な手順を解説
CakePHP3のバージョンを指定してインストールする方法を詳細解説。CakePHP3のインストールはComposerを使うため設定もほぼ自動で完了。データベースの接続情報を記載すればアプリ開発のベースが整う。
-
-
CakePHP3で「SQLSTATE[23000]: Integrity constraint violation」「SQLSTATE[42S22]: Column not found」などのエラーが出たときの確認するポイント
CakePHP3の開発で発生する「SQLSTATE[23000]: Integrity constraint violation」「SQLSTATE[42S22]: Column not found」のエラーには特有の原因もあるため、その説明と対処方法の解説。
-
-
CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説
CakePHPのログ出力方法の解説。app.phpにログ設定をし、スコープやレベルを指定してログ出力を振り分ける方法、CakePHP4で配列出力にはvar_exportが必要なことなどを解説。