The DoYouHaoBaby PHP Framework中文开发文档手册
Copyright(c) DoYouHaoBaby.NET All Rights Reserved.
Copyright(c) DoYouHaoBaby.NET All Rights Reserved.
[ 配置索引 ]
DoYouHaoBaby提供了灵活的全局配置功能,框架将配置存在文件中,支持惯例配置、项目配置和模块配置,并且会自
动生成配置缓存文件,无需重复解析的开销。对于有些简单的应用,你无需配置任何配置文件,而对于复杂的要求,
你还可以增加模块配置文件,另外DoYouHaoBaby的动态配置使得你在开发过程中可以灵活的动态调整配置参数。
DoYouHaoBaby在项目配置还编写了分层配置模式,其配置层次体现在:
惯例配置 项目配置 分组配置 模块配置 操作配置
以上是配置文件的加载顺序,但是因为后面的配置会覆盖之前的配置(在没有生效的前提下),所以优先顺序从右到
左。
DoYouHaoBaby 的有框架中G::C()来完成解析,并且框架初始化一个惯性配置。
- static public function C( $sName='',$Value='**back_the_config_data**' , $sKey ='',$bForce = false,
- $bKeyDelete=false ){
- //创建的一个配置实例
- static $oConfig=null;
- // 创建对象,并且初始化数据
- if( empty( $oConfig ) ){
- // 创建配置缓存目录
- if ( !is_dir( APP_DATA_PATH.'/~Config' ) ){
- self::makeDir( APP_DATA_PATH.'/~Config' );
- }
- // 实例化项目配置对象
- $oConfig =new Config( APP_DATA_PATH.'/~Config' );
- }
- // ''时返回配置数据
- if( !empty($sName) && $Value ==='**back_the_config_data**' ){
- if (!strpos($sName,'.')) {
- return $oConfig->getItem( $sKey ,$sName );
- }
- // 多维数组获取
- $arrName = explode('.',$sName );
- $arrConfigValue = $oConfig->getItems( $sKey );
- $sString = '$arrConfigValue'.E::arrayHandler( $arrName,1,0 );
- $sString = "\$sName = isset( {$sString} ) ? {$sString} : null;";
- return eval( $sString );
- }
- // $sName='' 返回所有配置值
- if( $sName ==='' && $Value!==null ){
- return $oConfig->getItems( $sKey );
- }
- // 如果$sName=null && $Value =null,那么是操作键值
- if( $sName===null and $Value===null ){
- // 删除所有子键
- if( $sKey===null ){
- return $oConfig->cleanChildKeys();
- }
- // 返回所有子键
- elseif( $sKey=='*' ){
- return $oConfig->getChildKeys();
- }
- // $sKey=='',返回顶层子键或者指定子键
- else{
- if( $bKeyDelete===false ){
- return $oConfig->getKey( $sKey );
- }
- else{
- return $oConfig->deleteKey( $sKey );
- }
- }
- }
- // $sName =null 删除所有配置值
- if( $sName ===null ){
- return $oConfig->cleanItems( $sKey );
- }
- // $Value=null时删除配置数据
- if( is_null( $Value ) ){
- $oConfig->deleteItem( $sKey ,$sName );
- }
- // 如果都不是,那么就是设置配置值
- // 如果是*,那么我们设置最顶层的配置数据
- if( is_array( $sName ) ){
- foreach( $sName as $sK =>$v ){
- if( !( $bForce===false && $oConfig->hasItem( $sKey, $sK ) )||
- $oConfig->getItem( $sKey ,$sName )!==$Value ){
- $oConfig->setItem( $sKey, $sK,$v );
- }
- }
- return;
- }
- else{
- if( !( $bForce===false && $oConfig->hasItem( $sKey, $sName ) )||$oConfig-
- >getItem( $sKey ,$sName )!==$Value ){
- if (!strpos($sName,'.')) {
- return $oConfig->setItem( $sKey, $sName,$Value );
- }
- // 多维数组设置
- $arrName = explode('.',$sName );
- $sString = '$arrConfigValue'.E::arrayHandler( $arrName,1,0 );
- $sString = "{$sString} ='{$Value}';";
- eval( $sString );
- return $oConfig->setItem( $sKey, $sName,$arrConfigValue );
- }
- }
- }
通常一个项目有一个默认配置就足够了,如果你需要更多配置,你可以仿照C函数中进行编写新的配置对象。
