【问题标题】:Slim 3 group routes name for middleware中间件的 Slim 3 组路由名称
【发布时间】:2017-10-03 09:52:30
【问题描述】:

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

# 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());

在第二组中,我希望 auth 中间件为 ajax 调用返回 403,而不是在第一组中重定向。

我不想像this great answer 中建议的那样管理包含所有路线名称的数组。它应该是组的名称,并根据它来决定返回什么样的响应代码。

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

【问题讨论】:

    标签: php slim middleware slim-3


    【解决方案1】:

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

    1. 在一组路由定义前附加一个可选的 URL 段。
    2. 将中间件应用于一组路由定义。

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

    【讨论】:

    • 谢谢。我可以接受,但在我看来这不是一个优雅的解决方案。我真的不需要路线组的名称,但需要指明我现在使用的组。即使它根本不可能,你不认为它可能是一个需要的功能吗?我还没有检查 Slim bugtracker 中的问题,我认为它可能是一个不错的候选者。
    • 这将是对代码的一次重大手术,因为在执行$app->run() 时没有“组”的概念。
    猜你喜欢
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    相关资源
    最近更新 更多