在 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指的是你在路由中调用的参数