ThinkPHP6.0路由别名跳转需两步:先在route.php中用->name('xxx')定义唯一标识,再在控制器用redirect('[name]', $param)或模板中用url('[name]', $param)调用;该方式自动适配后缀、子域名和分组,提升可维护性。

ThinkPHP6.0 设置路由别名跳转,核心是两步:先在路由定义时用 ->name() 给路由起唯一标识,再在控制器或模板中用 redirect() 或 url() 引用该标识。
一、定义带 name 的路由
必须在 app/route.php 中注册,并显式调用 ->name('xxx') 方法。字符串路径写法已废弃,推荐使用类@方法或数组形式:
- 正确写法(推荐):
Route::get('user/:id', [\app\controller\User::class, 'read'])->name('user.read'); - 兼容写法(单应用且开启自动解析):
Route::get('user/:id', 'user/read')->name('user.read'); - 错误写法(TP6 不支持):
Route::get('user/:id', 'user/read'); // 没有 name,无法按别名跳转
二、用别名跳转(控制器中)
在控制器方法里调用 redirect(),传入路由名和参数数组即可。框架会自动拼出完整 URL,不受后缀、域名、协议影响:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
return redirect('[user.read]', ['id' => 123]);→ 跳转到/user/123(或/user/123.html,取决于配置) - 含中文参数需提前 urlencode:
return redirect('[user.detail]', ['name' => urlencode('张三')]); - 跳转到带域名的别名路由(如 API 分组):
return redirect('[api.v1.user.info]', ['id' => 5]);
三、模板中生成别名链接或跳转
模板里不能直接 redirect,但可用 url() 生成地址,配合 JS 或表单提交实现跳转:
立即学习“PHP免费学习笔记(深入)”;
-
{:url('[user.read]', ['id' => $id])}→ 输出/user/123 <a href="%7B:url('[user.edit]',%20['id'%20=>%20%24id])%7D">编辑</a>- JS 跳转:
location.href = "{:url('[user.delete]', ['id' => $id])}";
四、注意事项
别名跳转不是“可选功能”,而是 TP6 的强制推荐方式。绕开别名直接写路径容易出错:
- 启用了
url_html_suffix(如.html),用字符串路径跳转会漏后缀,导致 404;用别名则自动适配 - 用了子域名或 API 版本分组(如
api/v1),别名能准确绑定对应分组,硬编码路径极易写错前缀 - 路由改了路径但没改 name,所有用该别名的地方仍正常工作,维护成本更低


















