发布于2026-07-08 阅读(0)
扫一扫,手机访问
路由缓存不生效这件事,说穿了其实就几个原因在作祟。很多人跑完 php think route:cache 后傻眼——明明文件生成在 runtime/route.php 里,框架却像没看见一样。问题到底出在哪?

php think route:cache 有时没生效路由缓存不生效,大概率不是命令没跑,而是框架没在运行时加载它。ThinkPHP 默认只在 APP_DEBUG = false 且存在 runtime/route.php 文件时才启用缓存路由;开发模式下即使生成了文件,也会被跳过。
APP_DEBUG = true 时,无论缓存文件是否存在,都会重新解析路由定义runtime/route.php,若 runtime 目录不可写,命令会静默失败(不报错但无文件)route/app.php 或注解路由后,必须重新执行缓存命令,旧缓存不会自动更新不能只看 runtime/route.php 存不存在,得看请求实际走的逻辑。最直接的方式是临时加一行日志到 think\Route 的初始化位置,或更简单:在控制器里输出 \think\App::debug() 和 is_file(RUNTIME_PATH . 'route.php')。
APP_DEBUG = false,否则缓存形同虚设config/app.php 中的 'route_config_file' 配置项,若被显式设为空数组或错误路径,会绕过缓存加载php think route:list 时,它总是解析源码路由,不代表运行时行为——这点容易误判ThinkPHP 的注解路由(@Route)本身支持缓存,但有明显边界:它只扫描 app/controller/ 下的类,且要求控制器类必须能被自动加载器正确识别。一旦控制器命名空间错位、文件名大小写不符、或用了别名引入,缓存生成阶段就会漏掉路由。
route/annotation.php 自定义扫描路径,缓存命令默认不读这个配置,需手动传参:php think route:cache --annotation#[Route('user')])在 ThinkPHP 6.0.x 中不支持缓存,需降级为 PHPDoc 注解上线时在部署脚本里加 php think route:cache 很常见,但容易忽略权限和上下文问题。该命令依赖完整的应用启动流程,需要 vendor/autoload.php 可用、配置已加载、且数据库等扩展不一定需要,但 think\Container 必须能正常实例化。
docker build 阶段运行该命令——runtime 目录通常挂载为卷,构建时生成的缓存上线即失效route.php(因主机名、路径等可能参与哈希)if [ $? -ne 0 ]; then exit 1; fi缓存文件本质是 PHP 数组 dump,看着简单,但它卡在「配置—加载—扫描—序列化」整条链路上,任一环节脱节,就退化成无缓存状态。最常被忽略的是 APP_DEBUG 开关和 runtime 目录写权限这两个点。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8