必须拆出 app.php、database.php、cache.php、log.php、route.php、validate.php 六个文件,其他自定义配置如 payment.php 需在 bootstrap.php 中显式调用 config::load() 加载。

旧版 config.php 必须手动拆成多个模块化 PHP 文件,不能直接复制粘贴,否则 Config::get() 会返回 null 或报 Undefined index。
哪些文件是必须拆出来的(TP6+ 默认加载)
ThinkPHP 6+ 启动时只自动合并以下文件名的配置: app.php、database.php、cache.php、log.php、route.php、validate.php。其他文件(如 api.php、pay.php)即使放在 config/ 目录下也不会被读取。
- 原
config.php中关于应用行为的配置(如'default_module'、'timezone')应挪到config/app.php - 数据库相关(
'type'、'hostname'、'database')必须进config/database.php,且注意'type'值要小写('mysql'),大写会触发Driver [MySQL] not supported - 缓存驱动、前缀等归
config/cache.php;日志级别、通道归config/log.php - 不要在这些文件里写逻辑(如
if (env('APP_DEBUG')) { ... }),只返回纯数组;环境变量覆盖只作用于一级键,嵌套结构无效
自定义配置(如 payment、sms、oss)怎么加载
TP6+ 不再扫描整个 config/ 目录,所有非默认配置文件都得显式载入,否则 Config::get('payment.key') 永远是 null。
- 把自定义配置写成
config/payment.php,返回数组:return ['key' => env('PAYMENT_KEY', ''), 'timeout' => 5]; - 在
app/bootstrap.php开头或某个服务提供者中调用:Config::load('config/payment.php', 'payment'); - 第二个参数
'payment'是配置分组名,决定读取时的前缀 —— 此后必须用Config::get('payment.key'),不能用Config::get('key') - 若该文件依赖环境变量,确保
.env中写的是PAYMENT_KEY=xxx(全大写+下划线),且只覆盖一级键,payment.key这种嵌套不会被.env覆盖
常见错误:Config::get() 返回 null 或 Class not found
不是代码写错了,而是配置没被框架“看见”。
-
Class 'think\Config' not found:说明还在用 TP5 的静态访问方式,必须改用think\facade\Config -
Undefined index: database:大概率是config/database.php文件不存在,或文件名拼错(比如写成Database.php或db.php),Linux 下大小写敏感 -
Config::get('database.hostname')返回null:检查config/database.php是否返回了'hostname'键(注意 TP6+ 推荐用'hostname',不是旧版的'host') - 修改完配置后仍不生效:清空
runtime/config/缓存目录,TP6 默认会缓存合并后的配置
最易忽略的一点:拆分不是体力活,关键是“命名+路径+显式加载”三者严格对应;少一个环节,配置就断在运行时,而且没有明显报错,只会默默返回 null。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











