thinkphp中的配置與讀取C方法詳解


1.項目公共配置

Conf/config.php

內容如下

<?php
/**
 *項目公共配置
 *@package
 *@author
 **/
return array(
    'LOAD_EXT_CONFIG'         => 'db,info,email,safe,upfile,cache,route,app,alipay,sms,platform,store,pay',        
    'APP_AUTOLOAD_PATH'     => '@.ORG',
    'OUTPUT_ENCODE'         =>  true,             //頁面壓縮輸出
    'PAGE_NUM'                => 15,
    /*Cookie配置*/
    'COOKIE_PATH'           => '/',             // Cookie路徑
    'COOKIE_PREFIX'         => '',              // Cookie前綴 避免沖突
    /*定義模版標簽*/
    'TMPL_L_DELIM'           =>'{sh:',           //模板引擎普通標簽開始標記
    'TMPL_R_DELIM'            =>'}',                //模板引擎普通標簽結束標記
    'TMPL_CACHE_ON'            => false,           //關閉模板緩存
    'DEFAULT_GROUP'         => 'Home',          //默認訪問分組,設置默認入口
    
    'APP_GROUP_LIST'        => 'Agent,Home,System,User,Store,Wap,Mall,Opener',      // 項目分組設定,多個組之間用逗號分隔,例如'Home,Admin'
    'PUBLIC_RESOURSE'       => './Public/',
    'URL_404_REDIRECT'      => './Tpl/404.html',
);
?>

'LOAD_EXT_CONFIG' => 'db,info,email,safe,upfile,cache,route,app,alipay,sms,platform,store,pay' 確定加載的額外的配置,這些配置都可以通過C()方法讀取,全局有效。

 

2.如果啟用了模塊分組,則可以在對每個分組單獨定義配置文件,分組配置文件位於:
項目配置目錄/分組名稱/config.php

'APP_GROUP_LIST' => 'Home,Admin', //項目分組設定
'DEFAULT_GROUP'  => 'Home', //默認分組

現在定義了Home和Admin兩個分組,則我們可以定義分組配置文件如下:
Conf/Home/config.php
Conf/Admin/config.php
每個分組的配置文件僅在當前分組有效,分組配置的定義格式和項目配置是一樣的。
注意:分組名稱區分大小寫,必須和定義的分組名一致。

 

3.讀取配置

定義了配置文件之后,可以使用系統提供的C方法(如果覺得比較奇怪的話,可以借助Config單詞來幫助記憶)來讀取已有的配置

C('參數名稱')//獲取已經設置的參數值

例如,C('APP_STATUS') 可以讀取到系統的調試模式的設置值,同樣,由於配置參數不區分大小寫,因此C('app_status')是等效的,但是建議使用大寫方式的規范。
如果APP_STATUS尚未存在設置,則返回NULL。

C方法同樣可以用於讀取二維配置

C('USER_CONFIG.USER_TYPE')//獲取用戶配置中的用戶類型設置

C方法讀取全局配置,以及當前模塊的配置。

參數沒有的話,將讀取全部的有效配置。

 

如果存在相同的配置名,前面的值將被覆蓋。

例如:

    'HTML_CACHE_TIME'        =>   60,            //靜態緩存有效期(秒)
    'HTML_CACHE_TIME'        =>   80,    

最終獲取的是80。

加載順序依照參數LOAD_EXT_CONFIG

'LOAD_EXT_CONFIG' => 'db,info,email,safe,upfile,cache,route,app,alipay,sms,platform,store,pay'

比如info中有個參數HTML_CACHE_TIME 為60 ,其余配置中沒有,那么這個參數讀取出來就是60。

如果db中也有HTML_CACHE_TIME為50,那么值還是60。因為info是后讀取的,把db中的HTML_CACHE_TIME覆蓋掉了。

 

 

附上C方法源碼

/**
 * 獲取和設置配置參數 支持批量定義
 * @param string|array $name 配置變量
 * @param mixed $value 配置值
 * @return mixed
 */
function C($name=null, $value=null) {
    static $_config = array();
    // 無參數時獲取所有
    if (empty($name)) {
        if(!empty($value) && $array = cache('c_'.$value)) {
            $_config = array_merge($_config, array_change_key_case($array));
        }
        return $_config;
    }
    // 優先執行設置獲取或賦值
    if (is_string($name)) {
        if (!strpos($name, '.')) {
            $name = strtolower($name);
            if (is_null($value))
                return isset($_config[$name]) ? $_config[$name] : null;
            $_config[$name] = $value;
            return;
        }
        // 二維數組設置和獲取支持
        $name = explode('.', $name);
        $name[0]   =  strtolower($name[0]);
        if (is_null($value))
            return isset($_config[$name[0]][$name[1]]) ? $_config[$name[0]][$name[1]] : null;
        $_config[$name[0]][$name[1]] = $value;
        return;
    }
    // 批量設置
    if (is_array($name)){
        $_config = array_merge($_config, array_change_key_case($name));
        if(!empty($value)) {// 保存配置值
            cache('c_'.$value,$_config);
        }
        return;
    }
    return null; // 避免非法參數
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM