## 概述
配置的加载、设置和获取功能统一由\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参数
~~~