必须删除 runtime/container 目录才能更新 Hyperf 路由映射,因路由缓存集成于注解扫描与容器编译机制中;修改路由注解、控制器、routes.php 或 AOP 等均需执行此操作,并刷新 Composer 自动加载、重启服务生效。

Hyperf 的路由缓存不是独立存在的“路由缓存”,而是集成在注解扫描与容器编译机制中的。修改路由(比如改了 config/routes.php、控制器路径、方法注解如 @GetMapping,或新增/删减路由类)后,旧的路由映射不会自动更新——因为 Hyperf 在启动时会将注解解析结果编译进 runtime/container 目录,后续直接加载编译后的代理类,跳过实时扫描。
必须清理的缓存目录:runtime/container
这是最核心的操作。只要涉及以下任一修改,就必须删除该目录:
- 新增、删除或重命名控制器类或方法
- 修改
@GetMapping、@PostMapping等路由注解的内容或位置 - 调整
config/routes.php中的闭包路由或控制器绑定 - 改动 AOP 切点、缓存注解(如
@Cacheable)、DI 注入逻辑
执行命令:
rm -rf runtime/container
配套操作:重载自动加载映射
如果同时新增了 PHP 类、修改了 namespace 或重命名文件,还需刷新 Composer 的类自动加载:
composer dump-autoload -o
否则可能出现 Class not found 错误,即使 runtime/container 已清空。
重启服务才能生效
清理和重载完成后,必须重启 Hyperf 进程,新路由才会被加载:
- 开发环境:
php bin/hyperf.php start - 生产环境(守护进程):
php bin/hyperf.php server:restart
注意:仅 kill -USR1 或热重载(Watcher)无法刷新路由映射,它们不触发注解重新扫描。
可选:用脚本一键完成三步
把下面内容保存为项目根目录的 reload.sh:
#!/usr/bin/env bash
set -e
echo "=== 清理容器缓存 ==="
rm -rf runtime/container
echo "=== 刷新自动加载 ==="
composer dump-autoload -o
echo "=== 重启服务 ==="
php bin/hyperf.php start
然后赋予执行权限:chmod +x reload.sh,之后每次改完路由,运行 ./reload.sh 即可。











