Zend_Config
开篇中提到,一切zf程序的起点都是index.php和zend_application。它主要完成各种配置项目的加载并通过run方法,将请求转发给前端控制器。
配置文件的加载,是通过Zend_config来完成的,我们来看一下它是如何工作的。
一般情况下,我们会在初始化zend_loader后,紧跟着就初始化zend_config,并读取configs中的application.ini主配置文件。
$config = new Zend_Config_Ini($filename,$section, $options);
第一个参数是指明要加载的配置文件地址,第二个参数是说明要加载哪一节配置(比如生产环境配置,开发环境配置)
Zend_config_ini的构造函数,首先会执行$this->loadIniFile()将该文件加载进来。然后根据$section的配置,确定是全部读取,还是只读取某一节。然后调用$this->_processSection()读取小节。$this->_processSection()中再调用$this->_processKey()读取具体配置信息。
下面介绍一下配置文件的书写方式,有一点需要说明,配置文件里面的小节命名方式有的会包含冒号分隔符,这是为了适应不同环境下配置而设置的分隔符。冒号前面为条件,后面为小节名,会根据参数来决定读取哪一节配置。每一行具体配置的名称,可以用.来进行分隔。这样配置文件的结构就是:节(:)->组(.)->配置信息
配置文件书写方式:
如果有多种环境,可以通过:来进行配置,比如在生产环境下使用以下配置
[live]
phpSettings.display_errors=0
在测试环境下和开发环境下,需要显示错误,可以在[live]段全部写完后,增加[staging:live]和[dev:live]段
[staging:live]
phpSettings.display_errors=1
[dev:live]
phpSettings.display_errors=1
Zend_config_ini构造函数的第二个参数$section,会决定加载哪一段配置。该参数如果为null,会加载所有配置
类图
类说明:
class Zend_Config_Ini
{
Proectced function _parseIniFile($filename)//调用php内置函数parse_ini_file解析读入的配置文件, process_sections 参数设为 TRUE。
protected function _loadIniFile($filename)//加载配置文件,调用_parseIniFile解析成数组,对于存在:号的可选配置,进行重命名,:号前的作为数组key,:号后的内容融合到value中。
protected function _processSection($iniArray, $section, $config = array())//处理每一个小节
protected function _processKey($config, $key, $value)//处理每一个key,包括key的嵌套
序列图
其他图
相关PHP内置函数:
解析配置文件:
Array parse_ini_file( string $filename [, bool $process_sections ] )
应用文件:Ini.php
应用目的:载入一个由 filename 指定的 ini 文件,并将其中的设置作为一个联合数组返回。如果将最后的 process_sections 参数设为 TRUE,将得到一个多维数组,包括了配置文件中每一节的名称和设置。process_sections 的默认值是 FALSE。
在iniphp中,该函数被封装在_parseIniFile方法中,process_sections被设置为true;
合并数组:array_merge(array1,array2,array3...)
应用文件:Ini.php
应用目的:处理带:号的小节,将:号前面的字符作为小节名,:号后面的内容融合到内容数组中。
在项目中的应用:
在application/configs/application.ini中配置各种信息,也可以增加其他ini文件,然后在index.asp中调用 Zend_Config的merge()方法进行整合。