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

ath*_*ene 13 php middleware laravel laravel-5

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

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

}]);
Run Code Online (Sandbox Code Playgroud)

我的中间件代码如下:

public function handle($request, Closure $next)
{
    return $next($request);
}
Run Code Online (Sandbox Code Playgroud)

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

Ami*_*pta 17

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

第一种方法

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

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

第二种方法

$request->route('parameter_name');

这里parameter_name指的是您在路线中称为参数的内容.


Sau*_*ogi 14

在你的情况下,你不能$id进入中间件.

通常,您可以使用以下:符号将参数传递给中间件:

Route::get('user/{id}', ['middleware' => 'auth:owner', function ($id) {
    // Your logic here...
}]);
Run Code Online (Sandbox Code Playgroud)

并将传递的参数转换为中间件方法,如下所示:

<?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');
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,该handle()方法通常只需要a $request和a $next closure,它有一个third parameter,这是我们的中间件参数.如果您在路由定义中将多个参数传递给中间件调用,则只需向handle()方法添加更多参数

希望这可以帮助!

  • 至少添加源:https://mattstauffer.com/blog/passing-parameters-to-middleware-in-laravel-5.1/ (7认同)