中间件Slim v3中的路由模式

时间:2016-03-18 00:48:43

标签: php routes slim middleware

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

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中我可以使用{id}获取$args['id'],但是如何在MyMiddle.php中获取它?

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

2 个答案:

答案 0 :(得分:4)

  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);
    });
    

答案 1 :(得分:0)

我决定加入一个Slim v2示例,因为当我遇到这篇文章时,我正在寻找它。您可以使用$this->app->router()->getCurrentRoute()->getPattern()回调挂钩中的slim.before.dispatch来完成相同的操作。