ThinkPHP 8.0.4 路由完全兼容旧版,无需调整定义;但需修正三类潜在问题:正则中连字符未转义、注解扫描路径未显式配置、多应用域名绑定缺失 domain_bind 配置。

ThinkPHP 8.0 升级到 8.0.4 不需要调整路由定义——只要你的项目原本就是基于 ThinkPHP 8.0.0~8.0.3 正常运行的,所有已写的路由(包括 Route::get()、Route::resource()、Route::domain()、注解路由等)在 8.0.4 中仍完全兼容。
但有三类实际场景下你可能“感觉需要改”,其实是旧写法暴露了潜在问题,不是版本强制要求,而是被新版本更严格地识别出来了:
Route::rule() 中混用正则和变量导致匹配失效
8.0.4 修复了部分路由解析边界 case,尤其当 pattern() 里用了未转义的连字符 - 或中文正则漏写 u 修饰符(虽然 TP 内部自动加,但字符类写错仍会崩),会导致变量不匹配、静默 fallback 到 MISS。
- 常见错误写法:
->pattern(['name' => '[a-z-]+'])(-在字符类中间未转义,正则语法错误) - 正确写法:
->pattern(['name' => '[a-z-]+'])→ 改为->pattern(['name' => '[a-z\-]+'])或把-放末尾:[a-z-]+ - 中文支持必须显式限定范围:
->pattern(['title' => '[\x{4e00}-\x{9fff}\w\-]{2,30}'])(注意双反斜杠)
注解路由扫描路径未显式配置,升级后“突然不生效”
8.0.4 对注解扫描的容错略收紧,如果之前靠默认路径 app\controller 碰巧跑通,但实际控制器在 app\admin\controller,而 config/annotation.php 里没补 'app\admin\controller',升级后就扫不到。
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
- 检查点:打开
config/annotation.php,确认'controllers'数组包含你所有应用的控制器命名空间 - 示例:
'controllers' => ['app\controller', 'app\admin\controller', 'app\api\controller'] - 缺失时,
php think route:list里完全看不到对应路由,也不会报错
多应用下域名绑定未配 domain_bind,升级后子域名 404
8.0.4 强化了多应用启动流程校验。如果你用了 Route::domain('admin.example.com'),但没在 config/app.php 里配 'domain_bind' => ['admin.example.com' => 'admin'],以前可能“碰巧转发”,现在直接拒绝调度。
- 必须同步配置两处:
-
config/app.php的domain_bind映射应用 - 路由文件中
Route::domain()定义具体规则
-
- 顺序不能反:先绑定,再写路由;否则
php think route:list里该域名路由不会出现在任何应用下
8.0.4 的路由核心逻辑没变,但它让“侥幸能跑”的模糊写法更容易暴露。真正要动的不是语法,而是把之前靠运气绕过的配置缺口补严实。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










