https://framework.zend.com/manual/2.4/en/tutorials/config.advanced.html#environment- specific-system-configuration
構成には、グローバルとローカル、つまりシステム構成とアプリケーション構成の 2 つのレベルがあります。
システム構成: システム構成は、アプリケーション インスタンスに渡すために使用されます。 Application インスタンスは、これらのコンテンツを使用して ModuleManager と ServiceManager を見つけます。
アプリケーション構成: ModuleManager は、モジュールのロード時に ConfigListener を使用して各モジュールの構成をマージします。これらの構成はアプリケーション構成と呼ばれます。各モジュールの設定は、最終的に config/autoload/ の下にある設定ファイルにマージされます。
アプリケーション設定は、ServiceManager に渡される前に EVENT_MERGE_CONFIG イベントに渡され、将来的に追加の変更が可能になります
システム構成:
モジュールをロードする前に、アプリケーション インスタンスにどのようなモジュールがあり、どこにあるかを伝える必要があります。
システム構成に含まれるフィールド:
注釈付きの部分はオプションです。システム構成はアプリケーションの起動前に読み込まれるため、通常は非常に小さいです。モジュール構成ファイルで service_manager を上書きできることを除き、残りは上書きできません。
アプリケーションシナリオに従って構成ファイルを選択します:
ある構成を開発モードで使用し、別の構成を実稼働環境で使用したい場合があります。 apache.conf または .htaccess に次の命令を追加できます:
PHP で getenv() または $_SERVER[] を使用してサーバー環境変数を取得し、環境変数に従って構成を設定します。
モジュール構成:
各モジュールは独自の構成ファイルを提供できます。
getConfig() を使用してモジュール独自の設定を返します。このメソッドは、moduleManager がモジュールをロードするときに自動的に呼び出されます。
getConfig は、ServiceManager によって提供されるすべての利用可能な Manager クラス (ControllerManager... など) の構成を提供します。
特定のマネージャー クラスをターゲットにしたい場合は、getControllerConfig() などの対応するモジュール メソッドを使用できます。 https://framework.zend.com/manual/2.4/en/tutorials/config.advanced.html#configuration-mapping-table
設定情報の優先順位:
さまざまな構成のマージ順序:
1.モジュールクラスの各種サービス設定メソッド
2. getConfig() によって返される設定には、他のサービス設定メソッドも含まれます。注: このメソッドによって返される構成はキャッシュされません (そのため、別のサービス構成メソッドを使用することをお勧めします)。
オペレーションマージの設定情報:
ZendModuleManagerListenerConfigListener は、すべての設定をマージする前に ZendModuleManagerModuleEvent::EVENT_MERGE_CONFIG イベントをトリガーしますが、ServiceManager には渡しません。このイベントをリッスンすることで、マージされた構成を操作できます。
構成情報をマージするためのワークフロー:
システム構成:
config/application.config.phpで定義されます;
統合されません。
プログラムによる制御設定が可能です。設定情報はアプリケーションインスタンスに渡されます。 ModuleManager はシステムを順番に初期化します。
アプリケーション構成:
ModuleManager は、システム構成で定義された各モジュール クラスを次の順序でマージします。
Moduleクラスのメソッドで定義されたサービス構成
Module::getConfig()によって返される設定
サービス設定のconfig_glob_pathsで定義されたファイル設定
ConfigListener によってトリガーされる EVENT_MERGE_CONFIG イベント: ConfigListener を構成する必要があるのはなぜですか? 他のリスナーが構成 (変更) を制御するのはなぜですか?
最終的にマージされた設定はServiceManagerに渡されます。