【问题标题】:Route pattern in middleware Slim v3中间件 Slim v3 中的路由模式
【发布时间】:2016-07-04 14:39:19
【问题描述】:

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

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 中获得它?

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

【问题讨论】:

    标签: php routes slim middleware


    【解决方案1】:
    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);
      });
      

    【讨论】:

    • 谢谢,完美运行:D。如果这些小东西在文档中,我将非常感激。 (如果他们是,请对我说,也许我是盲人(可能是 xD)并且看不到他们)。
    • 我们希望为文档网站做出更多贡献 :)
    • 哦,告诉我如何改进您的文档。我经常使用 Slim,我很喜欢它,所以我很高兴参与其中。如果你愿意,也许我可以开始翻译西班牙语。我来自西班牙 xD。这是我的电子邮件 legomolina@gmail.com。所以如果你想请给我发一份我开始翻译。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-06-28
      • 2013-12-14
      • 1970-01-01
      • 2015-02-14
      • 2017-10-03
      • 2015-03-17
      • 2018-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多