Lumen:如何从中间件获取 url 参数

Posted

技术标签:

【中文标题】Lumen:如何从中间件获取 url 参数【英文标题】:Lumen: how can I get url parameters from middleware 【发布时间】:2015-09-25 05:49:00 【问题描述】:

这是我的routes.php

$app->get('/users/id/', ['middleware' => 'example', function () 
  return "users";
]);

这是中间件中的handle函数:

public function handle($request, Closure $next)

  // I would like to get the value of the url parameter id here

  return $next($request);

有没有办法从我的中间件中获取参数id

* 编辑 *

我正在使用 Lumen 5.1.0

【问题讨论】:

我对 Laravel 不熟悉,但快速浏览后我认为您必须使用以下方法:laravel.com/docs/5.0/middleware#terminable-middleware。你能给我们类定义吗?那么,您从哪个类继承? @GuyT 我没有从任何类继承,我正在遵循一个非常简单的示例,如下所述:lumen.laravel.com/docs/middleware#defining-middleware。我的中间件类名为ExampleMiddleware,它只有上面的方法。您链接的“可终止中间件”对我有什么用处? 【参考方案1】:

如果传入的$request 值是Illuminate\Http\Request 的一个实例,我认为它可能是,那么该类有一个名为input() 的方法,它可以让你做到这一点:

你应该试试这个:

$id = $request->input('id');

【讨论】:

我尝试使用$id = $request->input('id');,但我在$id 中得到了null 题外话:截图中使用了什么字体? 我真的不记得了,那是 5 年前的事了。 没问题。谢谢!【参考方案2】:

Laravel 中的一些传统方法不适用于 Lumen。而在中间件中获取参数形式的URI就是其中之一。在 Laravel 中,我只需要调用 $request->id,它就会像魔术一样工作。但是这里为了在 Lumen 中获取参数,我需要做这样的事情:

$request->route()[2]['id']

【讨论】:

我不知道你使用的是哪个 Laravel 版本。你能检查一下这个$request->route()->parameter('id')吗? @Andrea,我添加了新答案。我希望这会有所帮助 是的,它有效!但是,请给我一个解释。它是如何工作的? 当调用 $request->route() 时,它会返回一个数组,其中包含有关您的路由的信息,例如您正在使用哪个中间件,您传递了哪些参数。试试dd($request->route(),你会明白我的意思。然后最后一个索引包含您通过路由传递的参数。 适用于 Lumen 5.1 和 Lumen 5.4。非常感谢。【参考方案3】:

我认为最新的lumen 5.6官方关于中间件的教程已经不适用了,已经过时了。

【讨论】:

以上是关于Lumen:如何从中间件获取 url 参数的主要内容,如果未能解决你的问题,请参考以下文章

Lumen 角色中间件缺少参数

Lumen 5.5 在每个json响应中发送一个默认参数

laravel / lumen 访问中间件中的 .env 值

Lumen 中的自定义 404 页面

如何在 Laravel 和 Lumen 的控制器构造函数中的中间件之后调用方法、函数或初始化类?

Laravel 5.2 API 与 Lumen 相比如何? [复制]