在 Laravel 中将参数传递给中间件
Passing parameters to middleware in Laravel
假设我有一个指向中间件的路由;
Route::get("/user/{id}", ['middleware' => 'auth', function ($id) {
}]);
而我的中间件代码如下:
public function handle($request, Closure $next)
{
return $next($request);
}
如果我想在中间件中使用$id
,我该怎么做?
在这种情况下,您不能将 $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');
}
}
Note that the handle()
method, which usually only takes a $request
and
a $next closure
, has a third parameter
, which is our middleware
parameter.
If you passed in multiple parameters like auth:owner,subscription
to your middleware
call in the route definition, just add more parameters to your
handle method which will look like this - handle($request, Closure $next, $role,$subscription)
您可以使用以下方法之一访问中间件中的路由参数:
第一种方法
$request->route()->parameters();
此方法将return所有参数的数组。
第二种方法
$request->route('parameter_name');
这里parameter_name
指的是你在路由中调用的参数
假设我有一个指向中间件的路由;
Route::get("/user/{id}", ['middleware' => 'auth', function ($id) {
}]);
而我的中间件代码如下:
public function handle($request, Closure $next)
{
return $next($request);
}
如果我想在中间件中使用$id
,我该怎么做?
在这种情况下,您不能将 $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');
}
}
Note that the
handle()
method, which usually only takes a$request
and a$next closure
, has athird parameter
, which is our middleware parameter.If you passed in multiple parameters like
auth:owner,subscription
to your middleware call in the route definition, just add more parameters to your handle method which will look like this -handle($request, Closure $next, $role,$subscription)
您可以使用以下方法之一访问中间件中的路由参数:
第一种方法
$request->route()->parameters();
此方法将return所有参数的数组。
第二种方法
$request->route('parameter_name');
这里parameter_name
指的是你在路由中调用的参数