ROUTE-GROUP
VSlim\RouteGroup
VSlim\RouteGroup 是 VSlim\App 的路由前缀分组器。它不是独立 runtime,只是把一组路由和 hooks 挂到同一个 prefix 下。
真理之源:
创建分组
$app = new VSlim\App();
$api = $app->group('/api');
之后在这个 group 上注册的路由,都会带上 /api 前缀:
$api->get('/users/:id', function (VSlim\Request $req) {
return 'user:' . $req->param('id');
});
实际匹配路径是 /api/users/:id。
支持的方法
和 App 基本一致:
group()middleware()before()after()get/post/put/patch/delete/head/options/any/mapresource/api_resourcesingleton/api_singletonresource_opts/api_resource_optssingleton_opts/api_singleton_optsget_named/.../map_named
嵌套 group
$api = $app->group('/api');
$v1 = $api->group('/v1');
$v1->get('/ping', fn () => 'pong');
最终路由是 /api/v1/ping。
组级 middleware / before / after
这些钩子只会作用在当前 prefix 下:
$api->middleware(function (VSlim\Request $req, callable $next) {
if ($req->path === '/api/blocked') {
return 'group-blocked';
}
return $next($req);
});
$api->after(function (VSlim\Request $req, VSlim\Response $res) {
if ($req->path === '/api/users/9') {
$res->text('after:' . $res->body);
return $res;
}
return null;
});
执行顺序:
- app 级
before - 匹配 prefix 的 group
before - app 级 middleware
- 匹配 prefix 的 group middleware
- route handler
- app 级
after - 匹配 prefix 的 group
after
这里的 group 匹配规则是“路径前缀匹配”,也就是:
/api会匹配/api/api会匹配/api/users/api不会匹配/api2
group 中的命名路由
命名路由仍然注册在全局 App 上,所以 url_for() 依然从 App 调:
$api->get_named('api.users.show', '/users/:id', fn (VSlim\Request $req) => 'ok');
echo $app->url_for('api.users.show', ['id' => '42']);
group 中的 resource
$api = $app->group('/api');
$api->resource('/users', UserController::class);
生成的路径会自动带前缀:
/api/users/api/users/:id- …
什么时候用 group
推荐用在这些场景:
- API 分版本:
/api/v1 - 后台管理:
/admin - 统一鉴权前缀:
/api/private - 给一批路由共享 middleware / hooks