Laravel - 如何通过路由组将变量传递给中间件?

Gau*_*nde 5 php laravel-routing laravel-5 laravel-middleware laravel-5.4

这是我的路线组,

Route::group(['middleware' => 'checkUserLevel'], function () {
                // my routes
            });
Run Code Online (Sandbox Code Playgroud)

这是我的中间件checkUserLevel,

public function handle($request, Closure $next, $level)
    {
        $user = Auth::user();
        if ($user->level > $level) {
            return redirect('testUrl');
        }

        return $next($request);
    }
Run Code Online (Sandbox Code Playgroud)

我想将$level变量传递给路由组中的中间件.谢谢.

Par*_*har 15

您可以使用冒号将多个参数传递到中间件.使用它像:

Route::group(['middleware' => 'checkUserLevel:some_value_of_level'], function () {
            // my routes
        });
Run Code Online (Sandbox Code Playgroud)

现在,您可以在$ level变量中包含此值.

public function handle($request, Closure $next, $level)
{
    $user = Auth::user();
    if ($user->level > $level) {
        return redirect('testUrl');
    }

    return $next($request);
}
Run Code Online (Sandbox Code Playgroud)

这会有所帮助.


编辑:2018年12月14日

您还可以将多个变量发送到中间件.您只需要使用逗号(,)分隔值.

Route::group(['middleware' => 'checkUserLevel:some_value_of_level, one_more_value_to_send'], function () {
                    // my routes
});
Run Code Online (Sandbox Code Playgroud)

并且您将在中间件处理程序one_more_value_to_send中获取变量中的值$level.

public function handle($request, Closure $next, $level, $another_value)
{
   $user = Auth::user();
   if ($user->level > $level) {
      return redirect('testUrl');
   }

   return $next($request);
}
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅:在Laravel 5.1中将参数传递给中间件