中间件的 Slim 3 组路由名称

Slim 3 group routes name for middleware

根据文档,我无法在 Slim 3 中为一组路由设置名称。
在 auth 中间件中,我想为所需的身份验证拆分路由,而不是。喜欢:

# These routes will return 302 redirect on auth false
$app->group('', function () use ($app) {
    $app->get('/first', 'HomeCtrl:first')->setName('first');
    $app->get('/second', 'HomeCtrl:second')->setName('second');
})->add(new \Lib\Middlewares\CheckSession());

# These routes will return 403 on auth false
$app->group('api/', function () use ($app) {
    $app->get('users', 'UsersCtrl:getUsers')->setName('users');
    $app->get('pages', 'PagesCtrl:getPages')->setName('pages');
})->add(new \Lib\Middlewares\CheckSession());

在第二组中,我希望身份验证中间件 return 403 用于 ajax 调用,而不是在第一组中重定向。

我不想像 中建议的那样管理包含所有路由名称的数组。它应该是组的名称,并根据它来决定对 return 的响应代码类型。

我也不想管理两个中间件。我正在寻找管理当前路由组的优雅解决方案。

Slim 3 组没有名称 - 它们本质上是做两件事的语法糖:

  1. 将可选的 URL 段添加到一组路由定义中。
  2. 将中间件应用于一组路由定义。

要执行您想做的事情,您的 CheckSession 中间件需要检查请求的路径以判断它是否以 api/ 开头,并在这种情况下发送 403。或者,CheckSession 可以查找通常与 ajax 请求一起发送的 X-Requested-With header。