配置加載
在ThinkPHP中,一般來(lái)說(shuō)應(yīng)用的配置文件是自動(dòng)加載的,加載的順序是:
慣例配置->應(yīng)用配置->擴(kuò)展配置->場(chǎng)景配置->模塊配置->動(dòng)態(tài)配置
以上是配置文件的加載順序,因?yàn)楹竺娴呐渲脮?huì)覆蓋之前的同名配置(在沒(méi)有生效的前提下),所以配置的優(yōu)先順序從右到左。
下面說(shuō)明下不同的配置文件的區(qū)別和位置:
慣例配置
慣例重于配置是系統(tǒng)遵循的一個(gè)重要思想,框架內(nèi)置有一個(gè)慣例配置文件(位于ThinkPHP/convention.php
),按照大多數(shù)的使用對(duì)常用參數(shù)進(jìn)行了默認(rèn)配置。所以,對(duì)于應(yīng)用的配置文件,往往只需要配置和慣例配置不同的或者新增的配置參數(shù),如果你完全采用默認(rèn)配置,甚至可以不需要定義任何配置文件。
建議仔細(xì)閱讀下系統(tǒng)的慣例配置文件中的相關(guān)配置參數(shù),了解下系統(tǒng)默認(rèn)的配置參數(shù)。
應(yīng)用配置
應(yīng)用配置文件是應(yīng)用初始化的時(shí)候首先加載的公共配置文件,默認(rèn)位于application/config.php
。
擴(kuò)展配置
擴(kuò)展配置文件是由extra_config_list
配置參數(shù)定義的額外的配置文件,默認(rèn)會(huì)加載database
和validate
兩個(gè)擴(kuò)展配置文件。
V5.0.1
開(kāi)始,取消了該配置參數(shù),擴(kuò)展配置文件直接放入application/extra
目錄會(huì)自動(dòng)加載。
場(chǎng)景配置
每個(gè)應(yīng)用都可以在不同的情況下設(shè)置自己的狀態(tài)(或者稱(chēng)之為應(yīng)用場(chǎng)景),并且加載不同的配置文件。
舉個(gè)例子,你需要在公司和家里分別設(shè)置不同的數(shù)據(jù)庫(kù)測(cè)試環(huán)境。那么可以這樣處理,在公司環(huán)境中,我們?cè)趹?yīng)用配置文件中配置:
'app_status'=>'office'
那么就會(huì)自動(dòng)加載該狀態(tài)對(duì)應(yīng)的配置文件(默認(rèn)位于application/office.php
)。
如果我們回家后,我們修改定義為:
'app_status'=>'home'
那么就會(huì)自動(dòng)加載該狀態(tài)對(duì)應(yīng)的配置文件(位于application/home.php
)。
狀態(tài)配置文件是可選的
模塊配置
每個(gè)模塊會(huì)自動(dòng)加載自己的配置文件(位于application/當(dāng)前模塊名/config.php
)。
模塊還可以支持獨(dú)立的狀態(tài)配置文件,命名規(guī)范為:application/當(dāng)前模塊名/應(yīng)用狀態(tài).php
。
模塊配置文件是可選的
如果你的應(yīng)用的配置文件比較大,想分成幾個(gè)單獨(dú)的配置文件或者需要加載額外的配置文件的話,可以考慮采用擴(kuò)展配置或者動(dòng)態(tài)配置(參考后面的描述)。
加載配置文件
Config::load('配置文件名');
配置文件一般位于APP_PATH
目錄下面,如果需要加載其它位置的配置文件,需要使用完整路徑,例如:
Config::load(APP_PATH.'config/config.php');
系統(tǒng)默認(rèn)的配置定義格式是PHP返回?cái)?shù)組的方式,例如:
return [
'配置參數(shù)1'=>'配置值',
'配置參數(shù)1'=>'配置值',
// ... 更多配置
];
如果你定義格式是其他格式的話,可以使用parse
方法來(lái)導(dǎo)入,例如:
Config::parse(APP_PATH.'my_config.ini','ini');
Config::parse(APP_PATH.'my_config.xml','xml');
parse方法的第一個(gè)參數(shù)需要傳入完整的文件名或者配置內(nèi)容。
如果不傳入第二個(gè)參數(shù)的話,系統(tǒng)會(huì)根據(jù)配置文件名自動(dòng)識(shí)別配置類(lèi)型,所以下面的寫(xiě)法仍然是支持的:
Config::parse('my_config.ini');
parse方法除了支持讀取配置文件外,也支持直接傳入配置內(nèi)容,例如:
$config = 'var1=val
var2=val';
Config::parse($config,'ini');
支持傳入配置文件內(nèi)容的時(shí)候 第二個(gè)參數(shù)必須顯式指定。
標(biāo)準(zhǔn)的ini格式文件定義:
配置參數(shù)1=配置值
配置參數(shù)2=配置值
標(biāo)準(zhǔn)的xml格式文件定義:
<config>
<var1>val1</var1>
<var2>val2</var2>
</config>
配置類(lèi)采用驅(qū)動(dòng)方式支持各種不同的配置文件類(lèi)型,因此可以根據(jù)需要隨意擴(kuò)展。