中间件 Slim v3 中的路由模式

Route pattern in middleware Slim v3

如何在中间件中获取路由模式:

routes.php:

$app->get('/myroute/{id}', function($req, $res, $args) {
//DO STUFF HERE
})->add(new MyMiddle());

middle.php:

class MyMiddle {
    public function __invoke($req, $res, $next) {
         //DO STUFF
    }
}

在routes.php中我可以用$args['id']得到{id},但是我怎样才能在MyMiddle.php中得到它?

谢谢,
克里斯蒂安·莫利纳

  1. 启用determineRouteBeforeAppMiddleware设置:

    $config = ['settings' => [
        'determineRouteBeforeAppMiddleware' => true,
        'displayErrorDetails' => true,
    ]];
    $app = new \Slim\App($config);
    
  2. 您现在可以使用 getAttribute() 从请求访问 Route 对象,并从路由获取参数:

    $app->add(function ($request, $response, $next) {
        $id = $request->getAttribute('route')->getArgument('id');
        return $next($request, $response);
    });
    

我决定包含一个 Slim v2 示例,因为当我遇到这个 post 时,我正在寻找它。您可以使用 slim.before.dispatch 回调挂钩中的 $this->app->router()->getCurrentRoute()->getPattern() 来完成同样的事情。