TP6.1路由强制显式注册、禁用自动解析与模糊匹配,废弃正则简写和Behavior机制,取消request()->module()等上下文方法,要求URL生成用数组格式、中间件显式绑定,且正则须通过pattern参数定义。

ThinkPHP5.0 和 6.1 在前后端分离场景下的路由规则差异,核心在于设计哲学和执行机制的重构:TP5.0 仍保留模块化、自动解析和松散匹配习惯;TP6.1 则强制显式声明、取消隐式行为、完全解耦路由与控制器生命周期。
路由注册方式完全不同
TP5.0 允许在 route.php 中直接写闭包或数组规则,比如:
Route::get('api/user', 'api/User/index');
它支持模糊匹配(如访问 /index/user 自动定位到 User 控制器 index 方法),也允许未定义路由 fallback 到默认控制器。
立即学习“PHP免费学习笔记(深入)”;
TP6.1 要求所有路由必须显式注册到 app/route.php,禁用自动解析。不再识别 index/user 这类路径,除非你明确定义:
- 用
Route::get('api/user', 'api/User/index')绑定具体控制器方法 - 或通过分组统一前缀:
Route::group('api', function () { Route::get('user', 'api/User/index'); }); - 不能再靠
url_auto_redirect或controller_auto_search做兜底
非 API 请求的 fallback 逻辑更严格
前后端分离需要前端路由(如 Vue Router history 模式)被后端“放行”,TP5.0 常用正则通配兜底:
Route::rule(':path', 'index/index', 'GET|POST');
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
但该写法容易误吞 /api/xxx,导致接口 404。
TP6.1 推荐明确区分:
- 关闭强制路由:
'url_route_must' => false(在 config/app.php 中) - 只对无扩展名路径 fallback:
Route::rule('[:path]', 'index/index')->ext('html');(加->ext('html')避免匹配 JSON 接口) - API 路径必须独立声明,例如绑定域名:
Route::domain('api', function () { Route::group('v1', [...] }); });,确保不被前端路由规则覆盖
正则与动态变量写法不再兼容
TP5.0 支持简写正则语法,如 :id\d+ 或 :name\w+ 直接写在路由字符串里。
TP6.1 废弃该写法,所有正则必须通过 pattern 参数显式传入:
- TP5.0:
Route::get('user/:id\d+', 'user/read'); - TP6.1:
Route::get('user/:id', 'user/read')->pattern(['id' => '\d+']);
同时,request()->module()、request()->controller() 等运行时上下文方法在 TP6.1 中不可用——获取路由参数只能用 request()->param('id'),不能依赖自动补全。
中间件绑定和跨域处理方式升级
TP5.0 的 Behavior 机制可全局拦截路由调度,常用来统一处理 CORS 或权限校验。
TP6.1 移除 Behavior,改用 PSR-15 标准中间件,且必须显式绑定:
- 不能再靠
app/middleware.php全局生效,要写成:Route::group('api')->middleware(\app\middleware\Cors::class); - CORS 中间件需手动放行 OPTIONS 请求,并设置
Access-Control-Allow-Credentials: true和白名单源 - 接口响应必须显式
return json($data),不能依赖模板输出或自动转换


















