> php教程 > php手册 > zendframework 초기화 구성

zendframework 초기화 구성

WBOY
풀어 주다: 2016-08-18 08:57:55
원래의
1135명이 탐색했습니다.

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

구성에는 글로벌과 로컬, 즉 시스템 구성과 애플리케이션 구성의 두 가지 수준이 있습니다.

시스템 구성: 시스템 구성은 애플리케이션 인스턴스에 전달하는 데 사용됩니다. 애플리케이션 인스턴스는 이러한 콘텐츠를 사용하여 ModuleManager 및 ServiceManager를 찾습니다.

애플리케이션 구성: ModuleManager는 모듈을 로드할 때 ConfigListener를 사용하여 각 모듈의 구성을 병합합니다. 이러한 구성을 애플리케이션 구성이라고 합니다. 각 모듈의 구성은 결국 config/autoload/ 아래의 구성 파일과 병합됩니다.

애플리케이션 구성은 ServiceManager로 전달되기 전에 EVENT_MERGE_CONFIG 이벤트로 전달되므로 향후 추가 수정이 가능합니다.


시스템 구성:

모듈을 로드하기 전에 애플리케이션 인스턴스에 어떤 모듈이 있고 어디에 있는지 알려야 합니다.

시스템 구성에 포함된 필드:

<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>
로그인 후 복사

주석처리된 부분은 선택사항입니다. 시스템 구성은 애플리케이션이 시작되기 전에 로드되므로 일반적으로 매우 작습니다. 모듈 구성 파일에서 service_manager를 재정의할 수 있다는 점을 제외하면 나머지는 재정의할 수 없습니다.

응용 시나리오에 따라 구성 파일을 선택하세요.

때로는 개발 모드에서 하나의 구성을 사용하고 프로덕션 환경에서 다른 구성을 사용하고 싶을 때가 있습니다. apache.conf 또는 .htaccess에 다음 지침을 추가할 수 있습니다.

SetEnv "APP_ENV" "development"
로그인 후 복사

PHP에서 getenv() 또는 $_SERVER[]를 사용하여 서버 환경 변수를 얻은 다음 환경 변수에 따라 구성을 설정합니다.

'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>
로그인 후 복사

모듈 구성:

각 모듈은 자체 구성 파일을 제공할 수 있습니다.

모듈 자체 구성을 반환하려면 getConfig()를 사용하세요. 이 메서드는 moduleManager가 모듈을 로드할 때 자동으로 호출됩니다.

<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>
로그인 후 복사

getConfig는 ServiceManager에서 제공하는 사용 가능한 모든 Manager 클래스(예: ControllerManager...)에 대한 구성을 제공합니다.

특정 관리자 클래스를 대상으로 하려면 getControllerConfig() 등과 같은 해당 모듈 메서드를 사용할 수 있습니다. https://framework.zend.com/manual/2.4/en/tutorials/config.advanced.html#configuration-mapping-table

 

구성 정보 우선순위:

다양한 구성의 병합 순서:

1. 모듈 클래스의 다양한 서비스 구성 방법

2. getConfig()에서 반환된 구성은 다른 서비스 구성 방법을 재정의합니다. 참고: 이 방법으로 반환된 구성은 캐시되지 않습니다. 따라서 다른 서비스 구성 방법을 사용하는 것이 가장 좋습니다.

작업 병합을 위한 구성 정보:

모든 구성을 병합하기 전에 ServiceManager에 전달하지 않고 ZendModuleManagerListenerConfigListener가 ZendModuleManagerModuleEvent::EVENT_MERGE_CONFIG 이벤트를 트리거합니다. 이 이벤트를 수신하면 병합된 구성에 대해 작업을 수행할 수 있습니다.

<?<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>
로그인 후 복사

구성 정보 병합 작업 흐름:

시스템 구성:

config/application.config.php에 정의됨

병합되지 않습니다.

프로그래밍 방식으로 제어를 구성할 수 있습니다.

구성 정보가 애플리케이션 인스턴스로 전달됩니다. ModuleManager는 시스템을 순차적으로 초기화합니다.

애플리케이션 구성:

ModuleManager는 시스템 구성에 정의된 각 모듈 클래스를 다음 순서로 병합합니다.

 Module 클래스 메소드에 정의된 서비스 구성

Module::getConfig()에 의해 반환된 구성

서비스 구성에서 config_glob_paths로 정의된 파일 설정

ConfigListener에 의해 트리거되는 EVENT_MERGE_CONFIG 이벤트: ConfigListener를 구성해야 하는 이유는 무엇입니까? 다른 리스너가 구성(수정)을 제어합니다.

최종 병합된 구성이 ServiceManager로 전달됩니다.

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿