在 Laravel 中将参数传递给中间件

2022-08-30 18:47:06

假设我有一条指向中间件的路线;

Route::get("/user/{id}", ['middleware' => 'auth', function ($id) {

}]);

我的中间件代码如下:

public function handle($request, Closure $next)
{
    return $next($request);
}

如果我想在中间件中使用,我该怎么做?$id


答案 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');
    }
}

请注意,通常只采用 a 和 a 的方法有一个 ,这是我们的中间件参数。handle()$request$next closurethird parameter

如果您在路由定义中传递了多个参数,例如中间件调用,只需向 handle 方法添加更多参数,如下所示 -auth:owner,subscriptionhandle($request, Closure $next, $role,$subscription)


答案 2

您可以使用以下方法之一访问中间件中的路由参数:

第一种方法

$request->route()->parameters();

此方法将返回所有参数的数组。

第二种方法

$request->route('parameter_name');

此处引用了您在路由中调用的参数。parameter_name


推荐