Webman路由分组是中大型项目刚需,前缀必须带开头斜杠(如/admin),嵌套分组需每层显式写/,中间件支持分组级统一绑定与路由级豁免,模块化需正确glob路径app/*/route/route.php。

Webman 的路由分组不是“锦上添花”,而是中大型项目里避免 route.php 变成面条代码的刚需手段。它直接决定你后续加权限、换域名、拆模块时改几行代码,而不是翻半天文件。
Route::group() 的前缀路径必须带开头斜杠
常见错误是写成 Route::group('admin', function () { ... }),结果所有子路由 404。Webman 要求前缀必须是完整路径段,比如 /admin、/api/v2,不能省略开头的 /。
- ✅ 正确:
Route::group('/admin', function () { Route::get('/dashboard', [...]); }) - ❌ 错误:
Route::group('admin', function () { ... })(会拼出admin/dashboard,但实际匹配的是/admin/dashboard) - ⚠️ 注意:嵌套分组时,每个层级都需显式写
/,比如Route::group('/api', function () { Route::group('/v1', function () { ... }),不能简写为/api/v1一层搞定
中间件绑定要区分「分组级」和「路由级」
在分组上调用 ->middleware(),作用于整个分组内所有子路由;但如果某个子路由需要额外中间件(比如登录接口要跳过鉴权),就得单独加,且顺序会影响执行——分组中间件先于路由中间件执行。
- 分组统一加鉴权:
Route::group('/admin')->middleware(app\middleware\Auth::class)->group(function () { ... }) - 某条路由豁免:
Route::get('/login', [...])->withoutMiddleware(app\middleware\Auth::class) - 性能影响:中间件越多,每次请求链路越长;高频接口(如健康检查
/ping)建议从分组中剥离,单独定义
多模块项目下 route.php 自动加载容易漏掉 glob 模式
按模块拆路由(如 app/admin/route.php、app/api/route.php)时,很多人直接抄 glob("app/**/route.php"),但 Webman 默认目录结构是 app/{module}/route/route.php,少一层 ** 就加载失败。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
立即学习“PHP免费学习笔记(深入)”;
- ✅ 推荐写法:
$routes = glob("app/**/route/route.php"); - ❌ 常见遗漏:
glob("app/*/route.php")(只匹配一级目录,漏掉app/v2/route/route.php) - 调试技巧:在
config/route.php开头加var_dump($routes); exit;,确认路径是否真被找到
RESTful 路由 + 分组时,别依赖框架自动补全方法
Webman 不像 Laravel 提供 Route::resource(),你得手动写 get、post 等。分组里写 REST 风格路由时,路径变量(如 {id})的正则约束必须显式声明,否则 FastRoute 匹配失败。
- ✅ 安全写法:
Route::get('/users/{id:\d+}', [...])(强制 id 是数字) - ❌ 危险写法:
Route::get('/users/{id}', [...])({id}默认等价于(?:[^/]+),可能匹配到恶意路径如../../etc/passwd) - 兼容性注意:FastRoute 对未约束变量的处理比原生 PHP
preg_match更宽松,上线前务必用非法值(如字符串、点号、斜杠)测一遍 404 是否正常触发
真正难的不是写对一个分组,而是当 app/user 和 app/user_v2 两个模块共存时,如何让它们的路由前缀、中间件、变量规则不互相污染——这时候,分组嵌套 + 显式路径约束 + 独立配置加载,缺一不可。


















