ThinkPHP 5.0 配置
目录
<!--
系统默认的配置文件目录就是应用目录(APP_PATH),
也就是默认的application下面,并分为应用配置
(整个应用有效)和模块配置(仅针对该模块有效)。
-->
├─application 应用目录
│ ├─config.php 应用配置文件
│ ├─database.php 数据库配置文件
│ ├─route.php 路由配置文件
│ ├─index index模块配置文件目录
│ │ ├─config.php index模块配置文件
│ │ └─database.php index模块数据库配置文件
<!--
如果不希望配置文件放到应用目录下面,可以在入口文件中定义独立的配置目录,添加CONF_PATH常量定义即可,如下:
-->
// 定义配置文件目录和应用目录同级
define('CONF_PATH', __DIR__.'/../config/');
// 扩展配置目录
<!--
5.0.1开始增加了扩展配置目录的概念,在应用配置
目录或者模块配置目录下面增加extra子目录,下面
的配置文件都会自动加载,无需任何配置。
-->
<!--
如果你定义了CONF_PATH常量为config目录为例,
扩展配置目录如下:
-->
├─application 应用目录
├─config 配置目录
│ ├─config.php 应用配置文件
│ ├─database.php 数据库配置文件
│ ├─route.php 路由配置文件
│ ├─extra 应用扩展配置目录
│ ├─index index模块配置文件目录
│ │ ├─extra index模块扩展配置目录
│ │ ├─config.php index模块配置文件
│ │ └─database.php index模块数据库配置文件
<!--
扩展配置文件的文件名(不含后缀)就是配置参数名,并且会和应用配置文件中的参数进行合并。
-->
配置格式
配置参数名不区分大小写(因为无论大小写定义都会转换成小写),新版的建议是使用小写定义配置参数的规范。
// 数组 项目配置文件
return [
// 默认模块名
'default_module' => 'index',
// 默认控制器名
'default_controller' => 'Index',
// 默认操作名
'default_action' => 'index',
//更多配置参数
//...
];
// 二维数组 项目配置文件
return [
'cache' => [
'type' => 'File',
'path' => CACHE_PATH,
'prefix' => '',
'expire' => 0,
],
];
其他配置格式支持
默认方式为PHP数组方式定义配置文件,你可以在入口文件定义CONF_EXT常量来更改为其它的配置类型:
// 更改配置格式为ini格式
define('CONF_EXT', '.ini');
<!--ini格式配置示例:-->
default_module=Index ;默认模块
default_controller=index ;默认控制器
default_action=index ;默认操作
<!--xml格式配置示例:-->
<config>
<default_module>Index</default_module>
<default_controller>index</default_controller>
<default_action>index</default_action>
</config>
<!--json格式配置示例:-->
{
"default_module":"Index",
"default_controller":"index",
"default_action":"index"
}
二级配置
配置参数支持二级,例如,下面是一个二级配置的设置和读取示例:
$config = [
'user' => [
'type' => 1,
'name' => 'thinkphp',
],
'db' => [
'type' => 'mysql',
'user' => 'root',
'password' => '',
],
];
// 设置配置参数
Config::set($config);
// 读取二级配置参数
echo Config::get('user.type');
// 或者使用助手函数
echo config('user.type');
系统不支持二级以上的配置参数读取,需要手动分步骤读取。
有作用域的情况下,仍然支持二级配置的操作。
配置加载
- 加载顺序:在ThinkPHP中,一般来说应用的配置文件是自动加载的,加载的顺序是:
惯例配置-》应用配置-》扩展配置-》场景配置-》模块配置-》动态配置
- 惯例配置:惯例重于配置是系统遵循的一个重要思想,框架内置有一个惯例配置文件(位于thinkphp/convention.php),按照大多数的使用对常用参数进行了默认配置。所以,对于应用的配置文件,往往只需要配置和惯例配置不同的或者新增的配置参数,如果你完全采用默认配置,甚至可以不需要定义任何配置文件
- 应用配置:应用配置文件是应用初始化的时候首先加载的公共配置文件,默认位于application/config.php。
- 扩展配置:扩展配置文件是由extra_config_list配置参数定义的额外的配置文件,默认会加载database和validate两个扩展配置文件。
- 场景配置:不同的业务场景使用指定的配置文件,场景配置文件和应用配置文件config.php是一样的定义。
- 模块配置:每个模块会自动加载自己的配置文件(位于application/当前模块名/config.php)。模块还可以支持独立的状态配置文件,命名规范为:application/当前模块名/应用状态.php。
- 动态配置:
Config::set('配置参数','配置值');
// 或者使用助手函数
config('配置参数','配置值');
// 批量设置
Config::set([
'配置参数1'=>'配置值',
'配置参数2'=>'配置值'
]);
// 或者使用助手函数
config([
'配置参数1'=>'配置值',
'配置参数2'=>'配置值'
]);
读取配置
- echo Config::get('配置参数1');
- echo config('配置参数1');
- dump(Config::get()); || dump(config());
- Config::has('配置参数2'); || config('?配置参数2');
- echo Config::get('配置参数.二级参数');
echo config('配置参数.二级参数');
独立配置文件
配置文件支持分离(也称为扩展配置),只需要在公共配置文件配置extra_config_list参数(V5.0.1版本已经废除该写法)。
例如,不使用独立配置文件的话,数据库配置信息应该是在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独立配置文件的type参数,应该是:
Config::get('database.type');
要获取完整的独立配置文件的参数,则使用:
Config::get('database');
环境变量
环境变量配置,在此框架中.env的用法与laravel的环境变量配置相同
ThinkPHP5.0支持使用环境变量配置。
在开发过程中,可以在应用根目录下面的.env来模拟环境变量配置,.env文件中的配置参数定义格式采用ini方式,例如:
app_debug = true
app_trace = true
如果你的部署环境单独配置了环境变量,那么请删除.env配置文件,避免冲突。
环境变量配置的参数会全部转换为大写,值为 null,no 和 false 等效于 "",值为 yes 和 true 等效于 "1"。
ThinkPHP5.0默认的环境变量前缀是PHP_,也可以通过改变ENV_PREFIX常量来重新设置。
注意,环境变量不支持数组参数,如果需要使用数组参数可以,使用下划线分割定义配置参数名:
database_username = root
database_password = 123456
或者使用
[database]
username = root
password = 123456
获取环境变量的值可以使用下面的两种方式获取:
Env::get('database.username');
Env::get('database.password');
// 同时下面的方式也可以获取
Env::get('database_username');
Env::get('database_password');
可以支持默认值,例如:
// 获取环境变量 如果不存在则使用默认值root
Env::get('database.username','root');
可以直接在应用配置中使用环境变量,例如:
return [
'hostname' => Env::get('hostname','127.0.0.1'),
];
环境变量中设置的app_debug和app_trace参数会自动生效(优先于应用的配置文件),其它参数则必须通过Env::get方法才能读取。