首先要确认路由是否被框架真正加载,检查app/route/app.php是否被正确读取、'app_route'=>true是否启用、use think\facade\route;是否声明、文件末尾是否有return语句,清除runtime/route.php缓存并执行php think route:clear验证。

路由注册后不生效,首先要确认它是否被框架真正加载——很多问题不是写得不对,而是根本没进到路由系统里。
检查路由文件是否被正确读取
ThinkPHP 6+ 默认只加载 app/route/app.php(单应用)或对应子应用下的 app/{name}/route/app.php(如 app/api/route/app.php)。如果你把路由写在 config/route.php、route/route.php 或控制器里,框架压根不会执行。
- 打开 config/app.php,确认存在且启用:
'app_route' => true(必须是布尔值 true,不能是字符串) - 多应用项目中,每个子应用的 config/app.php 都要单独配这个开关,主应用设置不继承
- 检查路由文件顶部是否有
use think\facade\Route;,缺了这行,Route::get() 会报错或静默失败
验证路由定义是否实际执行
路由文件是一个 PHP 脚本,它必须被运行并返回一个 think\route\RuleGroup 实例。TP6+ 不再支持“只调用 Route::get() 就完事”的写法。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 确保文件末尾有
return Route::group(...);或return Route::get(...)->middleware(...);等返回语句 - 不要把路由写在 if/else、闭包、中间件或钩子里——那些时机太晚,路由系统已初始化完毕
- 若用了
Route::import()引入其他文件,确认路径正确、被 import 的文件也符合返回规则
清除缓存并确认生效路径
ThinkPHP 会把路由编译成 PHP 文件缓存,默认位于 runtime/route.php。改了路由不清理,等于没改。
- 执行命令:
php think route:clear(TP6/TP8 均适用) - 上线环境若开启路由缓存(
php think route:cache),务必先清再重生成 - 检查 runtime/route.php 文件修改时间是否更新;若仍为空或内容未变,说明你的路由文件根本没被加载
快速验证是否加载成功
最直接的办法是加一行调试输出(仅开发环境):
- 在 app/route/app.php 开头加:
file_put_contents(runtime_path() . 'route_loaded.log', date('Y-m-d H:i:s') . "\n", FILE_APPEND); - 访问任意 URL 后查看该日志是否存在、是否有新记录。没有,说明文件未被执行
- 或者运行
php think route:list,如果列表为空或不含你写的路由,基本可断定未加载
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










