Heim > php教程 > php手册 > zendframework-Initialisierungskonfiguration

zendframework-Initialisierungskonfiguration

WBOY
Freigeben: 2016-08-18 08:57:55
Original
1135 Leute haben es durchsucht

https://framework.zend.com/manual/2.4/en/tutorials/config.advanced.html#environment-special-system-configuration

Es gibt zwei Konfigurationsebenen: global und lokal, also Systemkonfiguration und Anwendungskonfiguration.

Systemkonfiguration: Die Systemkonfiguration wird zur Übergabe an die Anwendungsinstanz verwendet. Die Anwendungsinstanz verwendet diese Inhalte, um den ModuleManager und den ServiceManager zu finden.

Anwendungskonfiguration: ModuleManager verwendet ConfigListener, um die Konfigurationen jedes Moduls beim Laden von Modulen zusammenzuführen. Diese Konfigurationen werden Anwendungskonfigurationen genannt. Die Konfiguration jedes Moduls wird schließlich mit der Konfigurationsdatei unter config/autoload/ zusammengeführt.

Die Anwendungskonfiguration wird an das Ereignis EVENT_MERGE_CONFIG übergeben, bevor sie an den ServiceManager übergeben wird, wodurch in Zukunft weitere Änderungen möglich sind


Systemkonfiguration:

Bevor wir ein Modul laden, müssen wir der Anwendungsinstanz mitteilen, welche Module es gibt und wo sie sich befinden.

In der Systemkonfiguration enthaltene Felder:

<span style="color: #008000;">//</span><span style="color: #008000;">包含整个应用中用到的模块,一般是模块的命名空间。</span>
'modules' =><span style="color: #000000;"> [
    </span>'Application',<span style="color: #000000;">
]</span>,

<span style="color: #008000;">//</span><span style="color: #008000;">module_listener_options留给ModuleManager的监听器使用(Zend\ModuleManager\Listener\ConfigListener</span>
'module_listener_options' =><span style="color: #000000;"> [

    </span><span style="color: #008000;">//</span><span style="color: #008000;">指明了模块的存储位置,一般在/module和/vendor两个目录下。</span>
    'module_paths' =><span style="color: #000000;"> [
        </span>'./module',
        './vendor',
    <span style="color: #008000;">//</span><span style="color: #008000;">也可以使用string key  </span>
        'module_namespace' => 'path_to_the_module's_Module_Class'<span style="color: #000000;">
    ],

    //模块加载之后的全局配置文件的路径。可以使用GLOB_BRACE标记:http://cn2.php.net/glob
    </span>'config_glob_paths'<span style="color: #000000;"> => [
        </span>'config/autoload/{{,*.}<span style="color: #0000ff;">global</span>,{,*.local}.php'<span style="color: #000000;">,
    ],

    //是否使用configuration cache。如果使用配置将会被缓存用于后续请求
//    </span>'config_cache_enabled'<span style="color: #000000;"> => $booleanValue,
    //创建配置缓存文件的名字
//    </span>'config_cache_key'<span style="color: #000000;"> => $stringKey,
    
    //是否使用模块类映射缓存。
//    </span>'module_map_cache_enabled'<span style="color: #000000;"> => $booleanValue,
    //缓存文件名
//    </span>'module_map_cache_key'<span style="color: #000000;"> => $stringKey,

    //缓存文件的路径
    //</span>'cache_dir'<span style="color: #000000;"> => $stringPath,

    //是否检查模块之间的依赖,默认检查。如果某个模块的抵赖模块没有加载,那这个模块也不会使用
    //</span>'check_dependencies'<span style="color: #000000;"> => true,
], //以上为</span>'<span style="color: #000000;">module_listener_options内容。

</span><span style="color: #008000;">//</span><span style="color: #008000;">用来创建自己的service manager
//'service_listener_options' => [
//    [
//        'service_manager' => $stringServiceManagerName,
//        'config_key'           => $stringConfigKey,
//        'interface'              => $stringOptionalInterface,
//        'method'                => $stringRequiredMethodName,
//    ],</span>
],

<span style="color: #008000;">//</span><span style="color: #008000;">用来初始化ServiceManager的初始配置。
//必须和Zend\ServiceManager\Config兼容
//'service_manager' => [],</span>
Nach dem Login kopieren

Die kommentierten Teile sind optional. Die Systemkonfiguration wird vor dem Start der Anwendung geladen und ist daher im Allgemeinen sehr klein. Außer service_manager kann in der Modulkonfigurationsdatei überschrieben werden, der Rest ist nicht überschreibbar.

Wählen Sie die Konfigurationsdatei entsprechend dem Anwendungsszenario aus:

Manchmal möchten wir eine Konfiguration im Entwicklungsmodus und eine andere Konfiguration in der Produktionsumgebung verwenden. Wir können die folgenden Anweisungen in apache.conf oder .htaccess hinzufügen:

SetEnv "APP_ENV" "development"
Nach dem Login kopieren

Verwenden Sie getenv() oder $_SERVER[] in PHP, um die Serverumgebungsvariablen abzurufen, und legen Sie dann die Konfiguration entsprechend den Umgebungsvariablen fest.

'config_glob_paths' =><span style="color: #000000;"> [
    </span><span style="color: #008080;">sprintf</span>('config/autoload/{,*.}{global,%s,local}.php', <span style="color: #800080;">$env</span><span style="color: #000000;">)
]</span>
Nach dem Login kopieren

Modulkonfiguration:

Jedes Modul kann seine eigene Konfigurationsdatei bereitstellen.

Verwenden Sie getConfig(), um die eigene Konfiguration des Moduls zurückzugeben. Diese Methode wird automatisch aufgerufen, wenn moduleManager das Modul lädt.

<span style="color: #008000;">//</span><span style="color: #008000;">File:module.php</span>

<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> getConfig()
{
    </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">include</span> __DIR__ . '/config/module.php'<span style="color: #000000;">;
}</span>
Nach dem Login kopieren

getConfig stellt die Konfiguration für alle verfügbaren Manager-Klassen bereit, die von ServiceManager bereitgestellt werden (z. B. ControllerManager...).

Wenn Sie auf eine bestimmte Managerklasse abzielen möchten, können Sie die entsprechende Modulmethode verwenden, z. B. getControllerConfig() usw. https://framework.zend.com/manual/2.4/en/tutorials/config.advanced.html#configuration-mapping-table

 

Priorität der Konfigurationsinformationen:

Reihenfolge verschiedener Konfigurationen zusammenführen:

1. Verschiedene Dienstkonfigurationsmethoden in der Modulklasse

2. Die von getConfig() zurückgegebene Konfiguration überschreibt andere Dienstkonfigurationsmethoden. Hinweis: Die von dieser Methode zurückgegebene Konfiguration wird nicht zwischengespeichert (daher ist es am besten, andere Dienstkonfigurationsmethoden zu verwenden).

Informationen zur Betriebszusammenführungskonfiguration:

Bevor alle Konfigurationen zusammengeführt, aber nicht an ServiceManager übergeben werden, löst ZendModuleManagerListenerConfigListener das ZendModuleManagerModuleEvent::EVENT_MERGE_CONFIG-Ereignis aus. Durch Abhören dieses Ereignisses können Sie die zusammengeführte Konfiguration bearbeiten.

<?<span style="color: #000000;">php
namespace FOO;
</span><span style="color: #0000ff;">use</span><span style="color: #000000;"> Zend\ModuleManager\ModuleEvent;
</span><span style="color: #0000ff;">use</span><span style="color: #000000;"> Zend\ModuleManager\ModuleManager;

</span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Module
{
    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> init(ModuleManager <span style="color: #800080;">$moduleManager</span><span style="color: #000000;">)
    {
        </span><span style="color: #800080;">$events</span> = <span style="color: #800080;">$moduleManager</span>-><span style="color: #000000;">getEventManager();
        </span><span style="color: #800080;">$events</span>->attach(ModuleEvent::EVENT_MERGE_CONFIG, <span style="color: #0000ff;">array</span>(<span style="color: #800080;">$this</span>, 'onMergeConfig'<span style="color: #000000;">));
    }
    
    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> onMergeConfig(ModuleEvent <span style="color: #800080;">$e</span><span style="color: #000000;">)
    {
        </span><span style="color: #800080;">$configListener</span> = <span style="color: #800080;">$e</span>-><span style="color: #000000;">getConfigListener();
        </span><span style="color: #800080;">$config</span> = <span style="color: #800080;">$configListener</span>->getMergedConfig(<span style="color: #0000ff;">false</span><span style="color: #000000;">);
        
        </span><span style="color: #0000ff;">if</span> (<span style="color: #0000ff;">isset</span>(<span style="color: #800080;">$config</span>['some_key'<span style="color: #000000;">])) {     
            </span><span style="color: #0000ff;">unset</span>(<span style="color: #800080;">$config</span>['some_key'<span style="color: #000000;">]);
        }
        
        </span><span style="color: #800080;">$configListener</span>->setMergedConfig(<span style="color: #800080;">$config</span><span style="color: #000000;">);
    }
}</span>
Nach dem Login kopieren

Workflow zum Zusammenführen von Konfigurationsinformationen:

Systemkonfiguration:

Definiert in config/application.config.php

Wird nicht zusammengeführt

Ermöglicht die programmgesteuerte Steuerungskonfiguration.

Konfigurationsinformationen werden an die Anwendungsinstanz übergeben. ModuleManager initialisiert das System sequentiell.

Anwendungskonfiguration:

ModuleManager führt jede in der Systemkonfiguration definierte Modulklasse in der folgenden Reihenfolge zusammen:

 Dienstkonfiguration definiert in der Modulklassenmethode

Von Module::getConfig() zurückgegebene Konfiguration

Dateieinstellungen, die durch config_glob_paths in der Dienstkonfiguration definiert werden

EVENT_MERGE_CONFIG-Ereignis, ausgelöst durch ConfigListener: Warum muss ConfigListener konfiguriert werden? Andere Listener steuern die Konfiguration (Änderung)

Die endgültige zusammengeführte Konfiguration wird an ServiceManager übergeben.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage