CakePHP4で定数の設定と呼び出し方法の解説(defineとConfigure)
2022/07/16
CakePHP4で定数の設定と呼び出し(defineとConfigure)
CakePHP4でサイトの構築をする際に、プログラム全体で使用する定数を設定し、それを呼び出す方法について解説します。
「CakePHP3でユーザ定義の定数、変数を設定し、読み込む方法解説」では、CakePHP3の時の設定方法として記事を書いていますが、CakePHP4では少し変更されていますので、改めて記事を書きました。
小規模なサイトであれば、定数を「bootstrap.php」に書いていく方法があります。
ファイルを分ける必要もないため、シンプルな方法です。
その方法が「bootstrap.phpに定数を設定する方法」です。
ですが、サイトの規模が大きくなると定数も多くなっていき、「bootstrap.php」が肥大化しますので、定数を別のファイルに分けて設定する方法もあります。
その方法が「定数を別ファイルに設定する方法」です。
bootstrap.phpに定数を設定する方法
最初は「bootstrap.php」に定数を設定(定義)する方法を解説します。
「/app/Config/bootstrap.php」に定数を設定
「/app/Config/bootstrap.php」に定数を設定します。
記述する場所は「bootstrap.php」のどこでも問題ありませんが、分かりやすくファイルの一番最後に追記するといいでしょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// define() で指定する場合 define("TEST","定数テスト"); // define() で指定する場合(配列の定義) define("TEST_ARRAY1",["0"=>"配列0","1"=>"配列1"]); // define() で指定する場合(連想配列の定義) define("TEST_ARRAY2",["a"=>"配列a","b"=>"配列b"]); // Configure で指定する場合 Configure::write("text1", "変数のテキスト"); // Configure で指定する場合(配列の定義) Configure::write("array1", ["0"=>"配列0","1"=>"配列1"]); // Configure で指定する場合(連想配列の定義) Configure::write("array2", ["a"=>"配列a","b"=>"配列b"]); |
定数の定義は、PHPの標準関数である「define()」をそのまま利用することができます。
PHP v7以降では、「define()」関数で配列も指定することができるようになりました。
また、CakePHP4の関数である「Configure」を利用することもできます。
引数の 1つ目が「定数名」になり、2つ目がその定数に入れる値になります。
2つ目の引数には、文字列のほか、配列、連想配列を指定することもできます。
また、「Configure」では、下記の様に複数をまとめて設定することもできます。
1 2 3 4 |
Configure::write( [ "array1" => ["0"=>"配列0","1"=>"配列1"], "array2" => ["a"=>"配列a","b"=>"配列b"], ]); |
設定した変数、定数を読み込む方法
「define()」関数で指定した定数は、コントローラー内でもテンプレート内でも定数名を書くだけで定数として使用することができます。簡単です。
(「define()」で定義した定数は、シングルクォートなどで囲みません。)
1 2 3 |
print_r(TEST); //「定数テスト」と表示される print_r(TEST_ARRAY1); //「Array ( [0] => 配列0 [1] => 配列1 ) 」と表示される print_r(TEST_ARRAY2); //「Array ( [a] => 配列a [b] => 配列b ) 」と表示される |
対して、「Configure::write()」で指定した変数は、「Configure::read()」を使ってコントローラー内で呼び出します。
1 2 3 4 5 6 7 8 9 10 11 12 |
namespace App\Controller; use Cake\Core\Configure; class SamplesController extends AppController { public function initialize(): void { $text1 = Configure::read("text1"); $array1 = Configure::read("array1"); $array2 = Configure::read("array2"); $this->set(compact("text1","array1","array2")); } |
上記のサンプルは、「initialize()」内で呼び出していますので、記述しているコントローラー全体で使用することができます。
特定のアクション内に記述し、そのアクション内だけで使用する方法もあります。
11行目のように「set()」メソッドを使ことでテンプレートで利用することもできるようになります。
上記の例では、「$array2 = Configure::read("array2");
」のように配列全体を取得していますが、下記のように値ごとに取得することも可能です。
1 2 |
$array2_a = Configure::read("array2.a"); $array2_b = Configure::read("array2.b"); |
連想配列から値を取得する方法ですので、下記のような記述も可能ではあります。
1 |
$array2_a = Configure::read("array2")["a"]; |
また、テンプレートファイルで直接呼び出しをする場合は、下記のように「use Cake\Core\Configure;
」を記述することで可能になります。
1 2 3 4 5 6 7 |
<?php use Cake\Core\Configure; ?> <?php print_r(Configure::read("array2")); ?> |
定数を別ファイルに設定する方法
定数の定義を「bootstrap.php」ファイルではなく、別ファイルに記述する方法を解説します。
CakePHP3から CakePHP4になって記述方法が変更になっていますので注意してください。
「/app/Config/const.php」ファイルを作成し定数を設定
「/app/Config/」フォルダの中に「const.php」ファイルを新規作成します。
(ここでのファイル名は「const.php」にしていますが、ファイル名の決まりはありませんので好みのファイル名を付けてください。)
定数は以下のように指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php // define() で指定する場合 define("TEST01", "test01定数"); // define() で指定する場合(連想配列の定義) define("TEST01_ARRAY", ["1"=>"公開","2"=>"非公開"]); return [ // Configure()で指定する場合 "text1" => "変数のテキスト", "array1" => ["0"=>"配列0","1"=>"配列1"], "array2" => ["a"=>"配列a","b"=>"配列b"], ]; |
「define()」関数で指定する場合は、「bootstrap.php」に記述するときと違いはありません。
「Configure」で指定する場合は、「return」の引数として配列で指定します。
そのため、定数の指定行は配列の値となりますので、それぞれの行の終わりは「;」ではなく「,」で区切ります。
1 2 3 4 5 |
<?php // define() で指定する場合 define("TEST01", "test01定数"); return []; |
ちなみに、定数を「const.php」ファイルのように別ファイルで管理する場合、「return [];
」は必須となります。
そのため、配列の中は空であっても記述しておく必要があります。
「return [];
」の記述がない場合は「Config file "const.php" did not return an array
」というエラーが表示されます。
定数を「const.php」ファイルに記述する際の記述方法が CakePHP3のころと異なっています。
詳しくは「CakePHP3でユーザ定義の定数、変数を設定し、読み込む方法解説」に記載している内容と比べてもらえるとわかりますが、CakePHP3のソースをコピペしてもエラーが発生しますので、ご注意ください。
また、CakePHP3のころには必要だった「use Cake\Core\Configure;
」の記述は必要なくなっています。(記述していても問題はありませんが。)
「/app/Config/bootstrap.php」に定数ファイルを読み込む設定
続いて、設定した「const.php」ファイルを読み込む設定を「/app/Config/bootstrap.php」に記述します。
記述する場所は分かりやすく「bootstrap.php」ファイルの一番最後などに記述しても OKですが、「bootstrap.php」の 81行目辺りから始まる、他のファイルもロードしている処理に追記する方がより良いでしょう。(下記 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に定数を設定する方法」と同じですので、ほぼコピペになりますが以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
namespace App\Controller; use Cake\Core\Configure; class SamplesController extends AppController { public function initialize(): void { $text1 = Configure::read("text1"); $array1 = Configure::read("array1"); $array2 = Configure::read("array2"); $this->set(compact('text1','array1','array2')); $array2_a = Configure::read('array2.a')); $array2_b = Configure::read('array2')['b']); $this->set(compact('array2_a','array2_b')); } |
より詳しく確認したい方は下記のオフィシャルサイトをご確認ください。
CakePHP4 オフィシャルサイト 環境設定
https://book.cakephp.org/4/ja/development/configuration.html#environment-variables
CakePHP3の関連記事
CakePHP4のCakeDC/Usersの Usersへの接続、バリデーションのカスタマイズ方法解説CakePHP4のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
CakePHP4で公開側と管理側のデザインテンプレートを分ける方法・setLayout()
CakePHP4でcontrollerで実行したバリデーションエラーをmodelのにマージする方法
CakePHP4で「app_local.php」「.env」を利用して環境ごとの定数を振り分ける方法
CakePHP4の定数定義ファイルを環境変数によって本番と開発を振り分ける方法解説
CakePHP4で定数の設定と呼び出し方法の解説(defineとConfigure)
CakePHP4のCakeDC/Usersのログイン時のリダイレクトとユーザ権限管理の設定解説
CakePHP4のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakePHP4のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説
その他の「CakePHP4」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でCSVファイルをアップロードしレコードを追加、更新する処理の作成方法の解説。モデルとは直接関連しないフォームからCSVファイルをアップロードするため汎用的に使用可能。
-
-
CakePHP3でページごとに読み込むJavaScript、CSSを変える処理の解説
CakePHP3でJavaScriptやCSSを編集する基本形から、それらやテンプレート(エレメント)を特定のテンプレートを読み込んだときのみ編集、実行するための方法、ブロック化について解説。
-
-
CakePHP 2.3で確認画面付きのお問い合わせフォームの作り方
CakePHPで確認画面付きのお問い合わせフォーム、メールフォームの作り方をサンプルを提示しながら解説。
-
-
CakePHP2の検索Plugin CakeDC/Searchで重複を省くgroup by(distinct)の実装方法
CakePHP2の検索プラグイン「CakeDC/Search」で、重複レコードを省くgroup by、distinctを使う方法についての解説。設定する場所はpaginatorの条件とするので、find()関数と同じ。
-
-
CakePHP3のOGPはHTMLヘルパーの$this->Html->meta()を使って設定
CakePHP3でOGPを設定する方法を解説。metaタグを編集するHTMLヘルパーを利用してOGPのタグを編集する。また、エレメントとして分割することでメンテナンス性も向上させる。
-
-
CakePHP 2.3 Search Pluginで検索処理 その2表示件数を動的に変える方法
CakePHPの検索プラグイン Search Pluginの検索処理の中で動的に表示件数を変える方法です。
-
-
CakePHP4のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
CakePHP4の英語のメッセージを日本語化(多言語化)する手順を解説。オリジナルのメッセージを作成する方法やプログラムで文言を追加する場合の対応なども解説。
-
-
CakePHP3のプラグイン「CakeDC/Users」を日本語化・翻訳ファイルもダウンロード可
CakePHP3のユーザ管理、ログイン認証プラグインである「CakeDC/Users」のメッセージを日本語にする手順の解説とともに、日本語の翻訳ファイルを提供。ファイルを設置すれば日本語になる!
-
-
CakePHP3でPHPExcelを使ってエクセルファイルを生成、出力する方法
CakePHP3でPHPExcelを利用してエクセルを編集、出力するサンプルソース+解説。PHPExcelのインストール方法の解説からファイル保存とダウンロードの方法なども解説。
-
-
CakePHP3でシェルを作成しコマンドラインから実行・CakePHP2との違い
CakePHP3のシェルスクリプトを作成し、コマンドラインから実行する方法を解説。複数単語をつなげる場合の対応方法がCakePHP2より制限が厳しくなったのでCakePHP3の命名規則の確認が必要だ。