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。
zendframework 初始化配置的更多相关文章
- 基于iSCSI的SQL Server 2012群集测试(二)--SQL群集安装后初始化配置测试
4.群集安装后初始化配置测试 4.1 禁用full-text 服务和Browser服务 Full-text服务:公司目前暂不使用,需在两个节点上分别禁用 Browser服务:为保证安全,建议将Brow ...
- 64.OV7725初始化配置
所有的结局都是好的,不好,是因为你还有坚持到最好. OV7725摄像头的初始化配置,需要SCCB总线即IIC接口配置.先发送配置数据到OV7725中,然后通过随机读取对应地址的数据来验证数据是否写进去 ...
- Linux - CentOS6.5服务器搭建与初始化配置详解(上)
1.新建一个虚拟机 选择典型 单机下一步 p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm 0cm 0.0001pt; text-align: ...
- Git 初始化配置
先给大家推荐个很不错的GIT学习资料:廖雪峰 <Git简介> http://www.liaoxuefeng.com/wiki/0013739516305929606dd183612485 ...
- SecureCRT 安装及初始化配置
安装 SecureCRT 7.3.4 安装以及破解方法 SecureCRT 6.5.0 汉化解压版 初始化配置 这里配置以SecureCRT 6.5.0 汉化解压版为例 1.调整SecureCRT终端 ...
- Linux - CentOS6.5服务器搭建与初始化配置详解(下)
传送带:Linux - CentOS6.5服务器搭建与初始化配置详解(上) 继续接着上面的安装,安装完后会出现下面界面 点击reboot重启 重启后可以看到下面的tty终端界面 因为这就是最小化安装 ...
- github远程仓库初始化配置
github远程仓库的提交一般是通过shell进行,windows下有Git Bash工具(https://git-for-windows.github.io/) 由于本地Git仓库和GitHub仓库 ...
- rt-thread 之组件与设备初始化配置
@2019-03-08 [小记] rt-thread 初始化配置有两个分支: 第一,板级设备初始化 rt_components_board_init() 第二,内核组件初始化 rt_component ...
- 迅为iTOP-4418/6818开发板-驱动-IO初始化配置介绍和例程
对于所有的处理器,pad 一般可以分为两大类:IO(输入输出).Power(VDD 和GDD).类似摄像头 IO.以太网 IO.PWM 的 IO 等等,都可以统称为 IO.一个 IO,有可能能够被配置 ...
随机推荐
- ServerSocketChannel API用法
java.nio.channels 类 ServerSocketChannel java.lang.Object java.nio.channels.spi.AbstractInterruptible ...
- php实现包含min函数的栈(这个题目用另外一个栈做单调栈的话时间复杂度会低很多)
php实现包含min函数的栈(这个题目用另外一个栈做单调栈的话时间复杂度会低很多) 一.总结 这个题目用另外一个栈做单调栈的话时间复杂度会低很多 二.php实现包含min函数的栈 题目描述 定义栈的数 ...
- 监听text等的改变事件
oninput事件是html5的标准事件,支持ie9和以上以及其他的火狐啊谷歌啊等浏览器 ie9以下的可以用onpropertychange <head> <script t ...
- redisson
http://www.tuicool.com/articles/BjyeaeQ http://blog.csdn.net/csujiangyu/article/details/51005342
- Cocos2d-x 3.0final 终结者系列教程05-AppDelegate入口类
下面是Cocos2d-x的程序入口: class AppDelegate : private cocos2d::Application { public: AppDelegate(); virtua ...
- C++ 如何快速清空vector以及释放vector内存?
平时我们在写代码时候,有思考过要主动去释放vector的内存吗? 1.对于数据量不大的vector,没有必要自己主动释放vector,一切都交给操作系统. 2.但是对于大量数据的vector,在vec ...
- PHP移动互联网开发笔记(1)——环境搭建及配置
开篇说明:记得我上大二的时候第一次听到PHP,当时只知道这是一个开发网站的语言,并没有深入学习,在学了Java Web开发和Android开发之后我对互联网的发展方向有了一个我自己的认识,现在我们不能 ...
- LUOGU 1525 关押罪犯 - 并查集拆点(对立点) / 二分+二分图染色
传送门 分析: 并查集: 第一步先将所有矛盾从大至小排序,显然先将矛盾值大的分成两部分会更优. 普通的并查集都只能快速合并两个元素至同一集合,却不能将两个元素分至不同集合. 对于将很多数分成两个集合, ...
- Golang快速入门
Go语言简介: Golang 简称 Go,是一个开源的编程语言,Go是从2007年末由 Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian L ...
- 概念的理解 —— 奇点(singularity point)、第一性原理(first principle)
奇点(singularity point)一词出现在不同的环境里,对应着不同的含义: wikipedia:Singularity 文艺作品: 未来学(Futurology):比如雷·库兹韦尔的< ...