程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> zendframework 初始化配置,zendframework配置

zendframework 初始化配置,zendframework配置

編輯:關於PHP編程

zendframework 初始化配置,zendframework配置


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

有兩個級別的配置:全局和局部也就是系統配置和應用配置。

系統配置:系統配置用來傳遞給Application實例。Application實例使用這些內容來定位ModuleManager和ServiceManager。

應用配置: ModuleManager在加載模塊的時候會用ConfigListener合並各個模塊的配置。這些配置被稱為應用配置。各個模塊的配置最終會和config/autoload/下的配置文件合並。

  應用配置在傳遞給ServiceManager之前會先傳給EVENT_MERGE_CONFIG事件,這將允許以後進行額外的修改


System Configuration:

  在加載模塊之前,我們必須得告訴Application的實例:有哪些模塊、這些模塊在什麼地方。

  系統配置裡面包含的字段:

//包含整個應用中用到的模塊,一般是模塊的命名空間。
'modules' => [
    'Application',
],

//module_listener_options留給ModuleManager的監聽器使用(Zend\ModuleManager\Listener\ConfigListener
'module_listener_options' => [

    //指明了模塊的存儲位置,一般在/module和/vendor兩個目錄下。
    'module_paths' => [
        './module',
        './vendor',
    //也可以使用string key  
        'module_namespace' => 'path_to_the_module's_Module_Class'
    ],

    //模塊加載之後的全局配置文件的路徑。可以使用GLOB_BRACE標記:http://cn2.php.net/glob
    'config_glob_paths' => [
        'config/autoload/{{,*.}global,{,*.local}.php',
    ],

    //是否使用configuration cache。如果使用配置將會被緩存用於後續請求
//    'config_cache_enabled' => $booleanValue,
    //創建配置緩存文件的名字
//    'config_cache_key' => $stringKey,
    
    //是否使用模塊類映射緩存。
//    'module_map_cache_enabled' => $booleanValue,
    //緩存文件名
//    'module_map_cache_key' => $stringKey,

    //緩存文件的路徑
    //'cache_dir' => $stringPath,

    //是否檢查模塊之間的依賴,默認檢查。如果某個模塊的抵賴模塊沒有加載,那這個模塊也不會使用
    //'check_dependencies' => true,
], //以上為'module_listener_options內容。

//用來創建自己的service manager
//'service_listener_options' => [
//    [
//        'service_manager' => $stringServiceManagerName,
//        'config_key'           => $stringConfigKey,
//        'interface'              => $stringOptionalInterface,
//        'method'                => $stringRequiredMethodName,
//    ],
],

//用來初始化ServiceManager的初始配置。
//必須和Zend\ServiceManager\Config兼容
//'service_manager' => [],

 加注釋的部分都是可選的。系統配置是應用啟動之前加載的,所以一般都很小。除了service_manager可以在模塊配置文件中重載,其余的都是不可重寫的。

 

根據應用場景選擇配置文件:

  有時候我們想在開發模式下使用一個配置,正式環境下使用另一個配置。我們可以在apache.conf或者.htaccess裡面添加如下指令:

SetEnv "APP_ENV" "development"

 

  在PHP中使用getenv()或者$_SERVER[]來獲取服務器環境變量,然後根據環境變量設置配置。

'config_glob_paths' => [
    sprintf('config/autoload/{,*.}{global,%s,local}.php', $env)
]

 

 

模塊配置:

  每一個模塊都可以提供自己的配置文件。

  使用getConfig()返回模塊自己的配置,,這個方法會被moduleManager加載模塊的時候自動調用。

//File:module.php

public function getConfig()
{
    return include __DIR__ . '/config/module.php';
}

 getConfig為所有ServiceManager提供的可獲得的Manager類(如:ContorllerManager。。)提供配置。

  如果想針對某一個manager類可以使用相應的模塊方法,如:getControllerConfig()等等。https://framework.zend.com/manual/2.4/en/tutorials/config.advanced.html#configuration-mapping-table

  

  配置信息的優先級:  

各種配置的合並順序:

  1、 module類裡的各種服務配置方法

  2、getConfig()返回的配置,會覆蓋其他的服務配置方法。注意:該方法返回的配置不會被緩存(所以最好使用各個不同的服務配置方法)。

 

操作合並的配置信息:

  合並所有的配置但未傳遞給ServiceManager之前,Zend\ModuleManager\Listener\ConfigListener會觸發Zend\ModuleManager\ModuleEvent::EVENT_MERGE_CONFIG事件。通過監聽這個事件你可以對已經合並的配置進行操作。

<?php
namespace FOO;
use Zend\ModuleManager\ModuleEvent;
use Zend\ModuleManager\ModuleManager;

class Module
{
    public function init(ModuleManager $moduleManager)
    {
        $events = $moduleManager->getEventManager();
        $events->attach(ModuleEvent::EVENT_MERGE_CONFIG, array($this, 'onMergeConfig'));
    }
    
    public function onMergeConfig(ModuleEvent $e)
    {
        $configListener = $e->getConfigListener();
        $config = $configListener->getMergedConfig(false);
        
        if (isset($config['some_key'])) {     
            unset($config['some_key']);
        }
        
        $configListener->setMergedConfig($config);
    }
}

 

 

 

 配置信息合並的工作流程:

系統配置:

  定義在config/application.config.php;

  不會合並;

  允許程序化的操控配置。

  配置信息傳遞給Application的實例。ModuleManager按順序初始化系統。

Application配置:

  ModuleManager按以下順序合並每一個定義在系統配置裡的module類:

    Module類方法裡面定義的服務配置

    Module::getConfig()返回的配置

  service configuration裡的config_glob_paths定義的文件設置

  ConfigListener 觸發的EVENT_MERGE_CONFIG事件:ConfigListener何必配置,其他監聽器操控配置(修改)

  最終合並好的配置傳遞給ServiceManager。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved