我正在使用Slim 3开发一个REST API项目,我想知道是否有一种简单的方法来实现以下路由,而无需为短端创建单独的路由。
../me
的简写为../users/{id}
,其中id
是当前用户ID。
到目前为止它很简单,我只创建两个路由,并将它们映射到相同的控制器方法;但是还有更多的端点使用相同的逻辑,例如:
../users/{id}/posts
应与../me/posts
使用相同,
../users/{id}/groups/{gid}
应使用as ../me/groups/{gid}
等
我使用双点表示存在前面的URI部分(版本,语言等)。 我希望你现在能得到这个想法。
所以我的问题是这样的:有没有办法重新路由这些请求,或者是否有一种符合我需求的路由模式,我错过了它,甚至我不得不在中间件中捣乱才能实现这一目标?
由于
答案 0 :(得分:1)
有一种方法可以利用Slim的FastRoute路由器。将正则表达式放入路径的变量部分,并在控制器内进行额外的解析:
$app->get('/whatever/{id:users/\d+|me}', function ($request, $response, $args) {
if (preg_match('%^users/(\d+)$%', $args['id'], $parsed)) {
// This is /users/{id} route:
$user = $parsed[1];
} else {
// This is /me route:
$user = 'automagically recognized user';
}
return $response->withStatus(200)->write('Hello '.$user);
});
但是,我发现这很奇怪,并建议将同一个控制器映射到两条单独的路径,就像现在一样。我想到了两个原因:
希望它有所帮助!
答案 1 :(得分:0)
试试吧
$app->get('/users[/{id}/groups[/{msgid}]]', function ($request, $response, $args) {
}
中的官方文档