命名路由必须用->name()显式注册才能被url()识别:注解路由需同时写@route和@name,name值须全局唯一、小写、仅含字母数字点号;多应用需加应用前缀;参数键名必须与路由变量名完全一致,大小写敏感,且环境需支持域名配置。

命名路由必须用 ->name() 显式注册才能被 url() 识别
ThinkPHP 的 url() 函数默认不认注解路由或未命名的路由规则。哪怕你写了 @route("api/users"),只要没加 @name("users.index"),url('users.index') 就会返回空字符串或触发 Route not found 错误。
显式命名是硬性前提,不是可选项:
- 路由定义里必须调用
->name('xxx'),例如:Route::get('user/:id', 'User/read')->name('user.show') - 注解路由同理:必须同时写
@route("user/:id")和@name("user.show") -
@name值必须全局唯一、小写、只含字母/数字/点号(如admin.user.list),不能有空格或斜杠 - 多应用模式下,命名需带应用前缀,如
admin@user.show,调用时也得写url('admin@user.show', ['id' => 5])
url() 第一个参数必须严格匹配命名,大小写和符号都不能错
命名是字符串精确匹配,不是模糊查找。写错一个字符、多一个空格、大小写不一致,都会导致生成失败。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 注册的是
->name('user.detail'),就不能写url('userDetail')或url('user.detail ')(末尾空格) - 变量名大小写敏感:路由里是
:Id,参数数组里就得用['Id' => 123],['id' => 123]不会匹配 - 如果路由在分组里(比如
Route::group('api', function () { ... })),命名仍按完整标识算,不需要额外加前缀,除非你手动加了
带参数时,键名必须和路由变量名完全一致
命名路由的反向解析只看「路由规则中声明的变量名」和「参数数组的键名」是否对齐,不推断、不转换、不忽略大小写。
- 路由为
Route::get('news/<year>\d{4}/<month>\d{2}', 'News/index')->name('news.archive')</month></year>,就必须传['year' => 2024, 'month' => 5] - 不能传
['y' => 2024]或['YEAR' => 2024],否则参数丢失,URL 变成/news//或 fallback 到普通 query 形式 - 正则别名(如
user/:id\d+)不被反解析支持,务必改用标准写法user/<id>\d+</id>并确保命名和键名一致 - 非路由变量(如
?tab=edit)可以一起放进第二个参数数组,框架会自动分离到 query 部分
CLI 或反向代理环境容易漏掉域名配置
在命令行、单元测试或 Nginx 反向代理后调用 url('user.show', ['id' => 1], true),很可能返回空或报错,不是函数问题,而是环境缺失关键信息。
- CLI 下没有
$_SERVER['HTTP_HOST'],$domain = true会因无法拼域名而失败;应改用配置项app.url_domain预设域名 - 反向代理(如 Nginx + HTTPS)需确保设置了
trust_proxy = true,并透传X-Forwarded-Proto和X-Forwarded-Host头,否则$domain = true可能生成 http:// 而非 https:// - 多域名部署时,
url()不会自动判断当前域名,必须显式传入字符串域名(如url('user.show', ['id' => 1], 'https://admin.example.com'))
命名路由生成 URL 看似简单,真正卡住人的地方往往不在语法,而在命名是否注册、键名是否对齐、环境是否可信——这三处任一出错,url() 都不会报明确错误,只会静默返回空或 fallback 到错误路径。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










