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。

时间: 2024-10-13 08:39:22

zendframework 初始化配置的相关文章

Jenkins安装和初始化配置

Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布/测试项目. 2.监控外部调用执行的工作. 所以安装Jenkins包含安装相应的jdk环境和Jenkins工具. 1.下载Jenkins最新版本 到官网https://jenkins.io/download/下载相应的版本,本次安装选择的是最新的2.62版本,选择适用于fedora系统 2.下载JDK8最新版本 到官网http://www.oracle.com/technetwork/j

zabbix docker - 安装和初始化配置

zabbix docker - 安装和初始化配置 安装zabbix server docker-mysql版本 zabbix server支持不同的数据库(详见zabbix的docker hub),这里选择mysql作为底层数据库, $ docker pull zabbix/zabbix-server-mysql 安装mysql docker $ docker pull mysql 设置和启动mysql数据库 $ docker run --name zabbix -v /var/docker_d

Linux - CentOS6.5服务器搭建与初始化配置详解(下)

传送带:Linux - CentOS6.5服务器搭建与初始化配置详解(上) 继续接着上面的安装,安装完后会出现下面界面 点击reboot重启 重启后可以看到下面的tty终端界面  因为这就是最小化安装 输入root和之前配置的密码 第一步先把防火墙给光了 iptables -F  命令用于清空规则 这里插一条命令(这个命令我忘记打上去了) /etc/init.d/iptables save  用于保存当前被清空的规则 chkconfig  iptables  stop  开机不允许启动防火墙 c

用MacBook对交换机进行初始化配置

用MacBook对交换机进行初始化配置 小王是一家系统集成商的设备安装工程师,日常工作经常要安装.调试各种工控机和交换机,平日里陪伴他的一台古董级的IBM T23笔记本,升级过硬件可还是又沉又慢,安装得是WindowsXP系统.留着它的原因只有一个有比较全面的接口,一直都没有舍得淘汰. 要是遇上编写文档方案查资料等事情,他还得换一台笔记本来操作. 像小王这种经常要跟串口通讯打交道的工程师最希望笔记本自带串口,可由于COM口通讯速度慢体积大等原因,目前的笔记本几乎都取消了这个接口.一些工程师只有配

OV7725初始化配置

所有的结局都是好的,不好,是因为你还有坚持到最好. OV7725摄像头的初始化配置,需要SCCB总线即IIC接口配置.先发送配置数据到OV7725中,然后通过随机读取对应地址的数据来验证数据是否写进去,基本思路是这样. 第一次测试读数据,是地址0X1C,读出来的数据是0X45,理论上应该是0X7F.可想而知,我的读操作有问题,如下图1所示. 图1 为什么会这样呢?多次调试后,还是没发现问题,后来和群友交流,发现问题了.经过验证后,正确结果如图2所示. 图2 分析问题: bit_cnt=='d9对

SCCM2012 R2实战系列之四:初始化配置

在之前的文章中,我们已经完成了SCCM 2012 R2 独立主站点的部署.为了客户端代理软件的顺利安装和OSD操作系统的分发,我们需要配置组策略及DHCP服务.在本系列的第四部分,跟大家一起分享下如何去实现SCCM的初始化配置. 1. 针对计算机OU的重定向 默认情况下,所有加域的计算机会自动存放到名为"computer"的容器中,为了方便对计算机的管理,我们需要重定向,让加域的计算机自动存放在名为"CMP"的OU中. 打开Active Directory用户和计算

开源框架ImageLoader初始化配置

android图片异步加载开源框架Android-Universal-Image-Loader 是一个被广泛应用的框架,Github上的下载路径为:https://github.com/nostra13/Android-Universal-Image-Loader ,用这个框架来帮助我们实现网络图片下载,不用担心OOM等问题,使用方便,我们简单讲下其它初始化配置. 一般而言我们是要全局使用ImageLoader,所以我们可以选择在Application中初始化设置该类.初始化ImageLoade

虚拟化桌面初始化配置处理

1.   以下进行用户首次登录软件第一次设置(初始化设置)制作工作: 使用到Defprof.exe工具,将其拷贝到C:\Temp\Tools目录下: 1)新建一个本地管理员账号defprof用来制作软件初始化配置默认文件, 2)使用defporf登录系统进行软件安装: 然后运行Win7模板里各软件,将需要做的初始化设置.提示都操作一遍,让其记录到defprof的用户配置文件里. 例如输入法设置,设置成只保留搜狗拼音.五笔.qq拼音.qq五笔等: 3)切换回另一管理员帐户ctxadmin(本地管理

新装系统(CentOS7.4)环境初始化配置笔记

新装系统(CentOS7.4)环境初始化配置笔记 一.概述 设备详情: Dell R730 服务器 (四个网卡,一根网线插在第2个网卡上) CentOS 7.4 x64 最小安装环境 二.网络环境配置 网卡1(em1)网络配置 # /etc/sysconfig/network-scripts/ifcfg-em1 #以下为修改 BOOTPROTO=static ONBOOT=yes #以下为新增 IPADDR=192.168.2.110 NETMASK=255.255.255.0 GATEWAY=