ThinkPHP 6.0 废弃运行时动态配置,所有配置必须在启动阶段通过 config/ 目录 PHP 文件或 .env 加载,config() 函数静默失效;配置文件须置于 config/ 根目录,自定义配置需显式调用 Config::load();推荐统一使用 Config::get() 读取,支持 .env 优先覆盖。

ThinkPHP 6.0 的动态配置机制与 5.1 有本质区别:5.1 支持运行时任意位置调用 config() 修改配置,且立即生效;6.0 废弃该能力,所有配置必须在启动阶段完成加载与合并,运行时不可更改。
配置修改方式彻底禁用
TP5.1 中常见写法:config('database.hostname', '127.0.0.1'); 或 config(['app_debug' => true]);
这类操作在 TP6.0 中完全无效——函数仍存在但不产生实际作用,也不会报错,属于静默失效。
- 所有配置项(包括数据库、缓存、session 等)必须通过
config/目录下的 PHP 文件或.env定义 - 若需差异化配置(如测试/生产环境),只能靠
.env+Config::get()读取,不能“改完再用” - 中间件、控制器、模型中执行
config()赋值,对后续逻辑无影响
配置加载路径和结构扁平化
TP5.1 允许在 application/config/ 下按模块建子目录(如 api/database.php),并自动识别;TP6.0 要求全部配置文件置于 config/ 根目录,且仅预设文件(app.php、database.php 等)默认加载。
- 原
config/api/下的pay.php需移至config/pay.php - 自定义配置不会自动载入,必须显式调用:
Config::load('pay', 'pay');(通常放在应用启动或中间件中) -
database.php中驱动名必须小写('type' => 'mysql'),大写会报错
配置读取语法统一为 Config 类
TP5.1 支持 config('database.hostname') 和 Config::get('database.hostname') 混用;TP6.0 推荐且实际稳定的方式只有后者,前者虽保留但底层已桥接到 Config::get(),语义上不再鼓励。
- 旧代码中的
config('app.name')可继续运行,但建议批量替换为Config::get('app.name') - 多级配置必须写全路径,如
Config::get('cache.default.type'),不能省略一级键名 - 配置不存在时返回
null,不触发警告或异常
环境变量 .env 成为配置源头之一
TP6.0 引入 .env 文件作为最优先配置源,可覆盖 config/*.php 中的同名项(如 DB_HOST=192.168.1.100 → Config::get('database.hostname') 返回该值)。
-
.env必须位于项目根目录,文件名严格为.env(无后缀、不可加版本号) - 变量值支持基本类型解析(
true/false/null/123),字符串需加引号 - 部署时禁止将敏感信息硬编码进 PHP 配置,应通过
.env管理
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











