## 概述
配置的加載、設置和獲取功能統一由\think\Config類完成。
## 使用
### 加載配置文件
~~~
\think\Config::load('配置文件名');
~~~
配置文件一般位于`APP_PATH`目錄下面,如果需要加載其它位置的配置文件,需要使用完整路徑,例如:
~~~
\think\Config::load(APP_PATH.'config/config.php');
~~~
系統默認的配置定義格式是PHP返回數組的方式,例如:
~~~
return [
'配置參數1'=>'配置值',
'配置參數1'=>'配置值',
// ... 更多配置
];
~~~
如果你定義格式是其他格式的話,可以使用parse方法來導入,例如:
~~~
\think\Config::parse(APP_PATH.'my_config.ini','ini');
\think\Config::parse(APP_PATH.'my_config.xml','xml');
~~~
parse方法的第一個參數需要傳入完整的文件名或者配置內容。
如果不傳入第二個參數的話,系統會根據配置文件名自動識別配置類型,所以下面的寫法仍然是支持的:
~~~
\think\Config::parse('my_config.ini');
~~~
parse方法除了支持讀取配置文件外,也支持直接傳入配置內容,例如:
~~~
$config = 'var1=val
var2=val';
\think\Config::parse($config,'ini');
~~~
支持傳入配置文件內容的時候 第二個參數必須顯式指定。
標準的ini格式文件定義:
~~~
配置參數1=配置值
配置參數2=配置值
~~~
標準的xml格式文件定義:
~~~
<config>
<var1>val1</var1>
<var2>val2</var2>
</config>
~~~
配置類采用驅動方式支持各種不同的配置文件類型,因此可以根據需要隨意擴展。
### 設置配置參數
使用set方法動態設置參數,例如:
~~~
\think\Config::set('配置參數','配置值');
// 或者使用快捷方法
C('配置參數','配置值');
~~~
也可以批量設置,例如:
~~~
\think\Config::set(['配置參數1'=>'配置值','配置參數2'=>'配置值']);
// 或者使用
C(['配置參數1'=>'配置值','配置參數2'=>'配置值']);
~~~
## 二級配置
配置參數支持二級,例如,下面是一個二級配置的設置和讀取示例:
~~~
$config = [
'user'=>['type'=>1,'name'=>'thinkphp'],
'db' =>['type'=>'mysql','user'=>'root','password'=>''],
];
// 設置配置參數
\think\Config::set($config);
// 讀取二級配置參數
echo \think\Config::get('user.type');
// 或者 echo C('user.type');
~~~
系統不支持二級以上的配置參數讀取,需要手動分步驟讀取。
有作用域的情況下,仍然支持二級配置的操作。
如果采用其他格式的配置文件的話,二級配置定義方式如下(以ini和xml為例):
~~~
[user]
type=1
name=thinkphp
[db]
type=mysql
user=rot
password=''
~~~
標準的xml格式文件定義:
~~~
<config>
<user>
<type>1</type>
<name>thinkphp</name>
</user>
<db>
<type>mysql</type>
<user>root</user>
<password></password>
</db>
</config>
~~~
set方法也支持二級配置,例如:
~~~
\think\Config::set(['type'=>'file','prefix'=>'think'],'cache');
~~~
### 獨立配置文件
新版支持配置文件分離,只需要配置`extra_config_list`參數(在應用公共配置文件中)。
例如,不使用獨立配置文件的話,數據庫配置信息應該是在config.php中配置如下:
~~~
/* 數據庫設置 */
'database' => [
// 數據庫類型
'type' => 'mysql',
// 服務器地址
'hostname' => '127.0.0.1',
// 數據庫名
'database' => 'thinkphp',
// 數據庫用戶名
'username' => 'root',
// 數據庫密碼
'password' => '',
// 數據庫連接端口
'hostport' => '',
// 數據庫連接參數
'params' => [],
// 數據庫編碼默認采用utf8
'charset' => 'utf8',
// 數據庫表前綴
'prefix' => '',
// 數據庫調試模式
'debug' => false,
],
~~~
如果需要使用獨立配置文件的話,則首先在config.php中添加配置:
~~~
'extra_config_list' => ['database'],
~~~
定義之后,數據庫配置就可以獨立使用`database.php`文件,配置內容如下:
~~~
/* 數據庫設置 */
return [
// 數據庫類型
'type' => 'mysql',
// 服務器地址
'hostname' => '127.0.0.1',
// 數據庫名
'database' => 'thinkphp',
// 數據庫用戶名
'username' => 'root',
// 數據庫密碼
'password' => '',
// 數據庫連接端口
'hostport' => '',
// 數據庫連接參數
'params' => [],
// 數據庫編碼默認采用utf8
'charset' => 'utf8',
// 數據庫表前綴
'prefix' => '',
// 數據庫調試模式
'debug' => false,
],
~~~
如果配置了`extra_config_list`參數,并同時在`config.php`和`database.php`文件中都配置的話,則`database.php`文件的配置會覆蓋`config.php`中的設置。
> 系統默認設置了兩個獨立配置文件,包括`database`和`route`。
### 讀取配置參數
設置完配置參數后,就可以使用get方法讀取配置了,例如:
~~~
echo \think\Config::get('配置參數1');
~~~
系統為get方法定義了一個快捷函數C,以上可以簡化為:
~~~
echo C('配置參數1');
~~~
讀取所有的配置參數:
~~~
dump(\think\Config::get());
// 或者 dump(C());
~~~
或者你需要判斷是否存在某個設置參數:
~~~
\think\Config::has('配置參數2');
~~~
## 作用域
配置參數支持作用域的概念,默認情況下,所有參數都在同一個系統默認作用域下面。如果你的配置參數需要用于不同的項目或者相互隔離,那么就可以使用作用域功能,作用域的作用好比是配置參數的命名空間一樣。
~~~
\think\Config::load('my_config.php','','user'); // 導入my_config.php中的配置參數,并納入user作用域
\think\Config::parse('my_config.ini','ini','test'); // 解析并導入my_config.ini 中的配置參數,讀入test作用域
\think\Config::set('user_type',1,'user'); // 設置user_type參數,并納入user作用域
\think\Config::set($config,'test'); // 批量設置配置參數,并納入test作用域
echo \Think\Config::get('user_type','user'); // 讀取user作用域的user_type配置參數
dump(\Think\Config::get('','user')); // 讀取user作用域下面的所有配置參數
dump(C('',null,'user')); // 同上
\think\Config::has('user_type','test'); // 判斷在test作用域下面是否存在user_type參數
~~~