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

时间:2017-03-16 07:35:28

标签: 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 ($user->level > $level) {
            return redirect('testUrl');
        }

        return $next($request);
    }

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

2 个答案:

答案 0 :(得分:11)

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

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日

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

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

您将在中间件处理程序中的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);
}

有关详细信息,请参阅:Passing parameters to Middleware in Laravel 5.1

答案 1 :(得分:1)

在Laravel 6.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呼叫溃败

http://local.pms.com:8080/department/add

结果将是这样的:

enter image description here

现在您可以在中间件中进行编码