将参数传递给 Laravel 中的中间件
Posted
技术标签:
【中文标题】将参数传递给 Laravel 中的中间件【英文标题】:Passing parameters to middleware in Laravel 【发布时间】:2017-04-19 22:01:30 【问题描述】:假设我有一个指向中间件的路由;
Route::get("/user/id", ['middleware' => 'auth', function ($id)
]);
而我的中间件代码如下:
public function handle($request, Closure $next)
return $next($request);
如果我想在中间件中使用$id
,我该怎么做?
【问题讨论】:
你有$request
变量使用它:) ($request->id
)
一个很有误导性的标题,应该是:“Passing route parameters to middleware in Laravel”。也许有人想传递一个不是路由参数的参数。接受的答案与标题不符。
【参考方案1】:
在您的情况下,您不能将$id
传递给中间件。
一般你可以像这样使用:
符号将参数传递给中间件:
Route::get('user/id', ['middleware' => 'auth:owner', function ($id)
// Your logic here...
]);
并将传递的参数获取到中间件方法中,如下所示:
<?php
namespace App\Http\Middleware;
use Closure;
class Authentication
public function handle($request, Closure $next, $role)
if (auth()->check() && auth()->user()->hasRole($role))
return $next($request);
return redirect('login');
注意
handle()
方法,它通常只需要一个$request
和 一个$next closure
,有一个third parameter
,这是我们的中间件 参数。如果您将多个参数(例如
auth:owner,subscription
)传递给中间件 在路由定义中调用,只需添加更多参数到您的 处理方法看起来像这样 -handle($request, Closure $next, $role,$subscription)
【讨论】:
至少加上来源:mattstauffer.com/blog/… 好的,但是从哪里获取参数值呢?是否必须通过控制器将它们添加到请求中,是否必须将它们添加到 URL 中,例如“some/parameter/store”或如何填充? 也可能对某人有用,您可以使用逗号分隔符将多个参数传递给中间件。像这样:Route::middleware(['auth.basic:driverName,fieldName'])
【参考方案2】:
您可以使用以下方法之一来访问中间件中的路由参数:
第一种方法
$request->route()->parameters();
此方法将返回一个包含所有参数的数组。
第二种方法
$request->route('parameter_name');
这里parameter_name
指的是你在路由中调用的参数。
【讨论】:
以上是关于将参数传递给 Laravel 中的中间件的主要内容,如果未能解决你的问题,请参考以下文章