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

Php 如何通过路由组将变量传递给中间件?,php,laravel-5,laravel-routing,laravel-5.4,laravel-middleware,Php,Laravel 5,Laravel Routing,Laravel 5.4,Laravel Middleware,这是我的路线组 Route::group(['middleware' => 'checkUserLevel'], function () { // my routes }); 这是我的中间件checkUserLevel public function handle($request, Closure $next, $level) { $user = Auth::user(); if ($use

这是我的路线组

Route::group(['middleware' => 'checkUserLevel'], function () {
                // my routes
            });
这是我的中间件checkUserLevel

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

        return $next($request);
    }
我想将
$level
变量从路由组传递给中间件。
谢谢。

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

Route::group(['middleware' => 'checkUserLevel:some_value_of_level'], function () {
            // my routes
        });
现在,您可以在$level变量中包含此值

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

    return $next($request);
}
这会有帮助


编辑:2018年12月14日 您还可以向中间件发送多个变量。您只需要使用逗号(,)分隔这些值

您将在中间件处理程序中
$level
之后的变量中获得值
one\u-more\u-value\u-to\u-send

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

   return $next($request);
}

有关更多详细信息,请参阅:Laravel6.x中的,您必须这样做 在中间件中添加类似的代码

 public function handle($request, Closure $next,$module=null,$right=null)
    {
        dd($module,$right);
        return $next($request);
    }
你的路线代码是这样的

Route::get('/department/add', 'DepartmentController@addNew')->middleware('ManualSec:abc,xyz');
在Kernel.php中,在$routeMiddleware部分注册中间件,如

'ManualSec' => \App\Http\Middleware\ManualSec::class,
在我的例子中,通过使用url调用rout

http://local.pms.com:8080/department/add
其结果如下:


现在您可以在中间件中编写代码了

添加多个变量的任何方法都可能重复?@xEterno是的,您可以通过逗号分隔多个变量来发送它们。此解决方案也适用于7.x
http://local.pms.com:8080/department/add