Hyperf 配置加载顺序为:框架默认配置 → 项目 autoload 配置(字母序)→ 环境专属配置 → 运行时环境变量,后加载者覆盖同名键;修改应优先在 config/autoload/ 或 .env 中进行,避免直接改 vendor,并需重启服务生效。

Hyperf 的配置加载是按固定顺序进行的,修改配置需清楚各阶段优先级,否则容易被覆盖。
配置文件加载顺序(从低到高)
Hyperf 启动时按以下顺序加载配置,后加载的会覆盖前加载的同名键:
-
框架默认配置:如
vendor/hyperf/config/autoload/下的基础配置(数据库、HTTP 等默认值) -
项目 autoload 配置:即
config/autoload/目录下所有 PHP 文件(如database.php、server.php),按文件名字母序加载 -
环境专属配置:如
config/autoload/{env}/(例如config/autoload/dev/或config/autoload/prod/),仅在对应APP_ENV下生效,覆盖同名 autoload 配置 -
运行时环境变量:通过
.env文件或系统环境变量设置的HYPERF_*前缀变量(如HYPERF_DATABASE_HOST=127.0.0.1),最终覆盖 PHP 配置中的对应项
如何安全修改核心配置
不建议直接改 vendor 中的框架默认配置。推荐方式如下:
- 在
config/autoload/下新建或修改对应文件(如要改 Redis 配置,编辑config/autoload/redis.php) - 若需区分环境,把配置移到
config/autoload/{env}/,比如开发环境用config/autoload/dev/redis.php - 敏感或易变参数(如密码、地址)优先走
.env:在.env中写REDIS_HOST=192.168.1.100,然后在 PHP 配置中用env('REDIS_HOST')读取 - 自定义配置类(如
App\Config\MyConfig)需确保被正确扫描,可在config/autoload/dependencies.php中注册为单例,或使用@Value注入
验证配置是否生效
启动后可通过命令行快速检查实际加载结果:
- 运行
php bin/hyperf.php config:publish查看合并后的完整配置快照(输出到控制台) - 在代码中调用
Container::get(ConfigInterface::class)->get('database.default.host')获取指定键值 - 注意:修改配置后必须重启服务(包括
watcher或server:start),热重载不刷新 autoload 配置
常见踩坑点
这些细节容易导致配置“看似修改了却没生效”:
- 文件名拼写错误(如写成
dataabse.php),Hyperf 会静默跳过 - PHP 配置文件中返回非数组(如漏写
return [...]),会导致整个文件加载失败 -
.env中变量名未加HYPERF_前缀,且未在 PHP 配置中显式调用env(),则不会生效 - 环境变量与
APP_ENV不匹配(如APP_ENV=prod却只配了dev/下的配置)










