💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
在ThinkPHP中,一般来说应用的配置文件是自动加载的,加载的顺序是: > 惯例配置(位于`thinkphp/convention.php`)->应用配置(application/config.php)->扩展配置(application/extra/xxx.php)->场景配置->模块配置(application/当前模块名/config.php)->动态配置 ## **设置配置参数** ~~~ //项目配置文件 return [ // 默认模块名 'default_module' => 'index', // 默认控制器名 'default_controller' => 'Index', // 默认操作名 'default_action' => 'index', 'cache' => [ 'type' => 'File', 'path' => CACHE_PATH, 'prefix' => '', 'expire' => 0, ], //更多配置参数 //... ]; //动态设置 Config::set('配置参数','配置值'); // 或者使用助手函数动态设置 config('配置参数','配置值'); //也可以批量设置 Config::set([ '配置参数1'=>'配置值', '配置参数2'=>'配置值' ]); //或 config([ '配置参数1'=>'配置值', '配置参数2'=>'配置值' ]); ~~~ ## **读取配置参数** 设置完配置参数后,就可以使用get方法读取配置了,例如: ~~~ echo Config::get('配置参数1'); ~~~ 系统定义了一个助手函数`config`,以上可以简化为: ~~~ echo config('配置参数1'); ~~~ 读取所有的配置参数: ~~~ dump(Config::get()); // 或者 dump(config()); ~~~ 或者你需要判断是否存在某个设置参数: ~~~ Config::has('配置参数2键名'); // 或者 config('?配置参数2键名'); ~~~ 如果需要读取二级配置,可以使用: ~~~ echo Config::get('配置参数键名.二级参数键名'); echo config('配置参数键名.二级参数键名'); ~~~ 获取extra扩展配置 ``` config(文件名.配置参数的键名) ``` ## 场景配置 每个应用都可以在不同的情况下设置自己的状态(或者称之为应用场景),并且加载不同的配置文件。 举个例子,你需要在公司和家里分别设置不同的数据库测试环境。那么可以这样处理,在公司环境中,我们在应用配置文件中配置: ~~~ 'app_status'=>'office' ~~~ 那么就会自动加载该状态对应的配置文件(默认位于`application/office.php`)。 > 场景配置文件和应用配置文件`config.php`是一样的定义。 如果我们回家后,我们修改定义为: ~~~ 'app_status'=>'home' ~~~ 那么就会自动加载该状态对应的配置文件(位于`application/home.php`)。 > 场景配置文件是可选的 系统默认的配置文件目录就是应用目录(`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/'); ~~~ 配置目录下面的结构类似如下: ~~~ ├─application 应用目录 ├─config 配置目录 │ ├─config.php 应用配置文件 │ ├─database.php 数据库配置文件 │ ├─route.php 路由配置文件 │ ├─index index模块配置文件目录 │ │ ├─config.php index模块配置文件 │ │ └─database.php index模块数据库配置文件 ~~~ ## 扩展配置目录(`V5.0.1`) `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模块数据库配置文件 ~~~ ## 环境变量配置 `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`方法才能读取。 ## 独立配置文件 > 配置文件支持分离(也称为扩展配置),只需要在公共配置文件配置`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'); ~~~ ## 作用域 配置参数支持作用域的概念,默认情况下,所有参数都在同一个系统默认作用域下面。如果你的配置参数需要用于不同的项目或者相互隔离,那么就可以使用作用域功能,作用域的作用好比是配置参数的命名空间一样。 ~~~ // 导入my_config.php中的配置参数,并纳入user作用域 Config::load('my_config.php','','user'); // 解析并导入my_config.ini 中的配置参数,读入test作用域 Config::parse('my_config.ini','ini','test'); // 设置user_type参数,并纳入user作用域 Config::set('user_type',1,'user'); // 批量设置配置参数,并纳入test作用域 Config::set($config,'test'); // 读取user作用域的user_type配置参数 echo Config::get('user_type','user'); // 读取user作用域下面的所有配置参数 dump(Config::get('','user')); dump(config('',null,'user')); // 同上 // 判断在test作用域下面是否存在user_type参数 Config::has('user_type','test'); ~~~ 可以使用`range`方法切换当前配置文件的作用域,例如: ~~~ Config::range('test'); ~~~