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

a1o7rhls  于 2022-11-18  发布在  其他
关注(0)|答案(2)|浏览(151)

这是我的路由组,

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变量从路由组传递到中间件。谢谢。

omhiaaxx

omhiaaxx1#

您可以简单地使用冒号将多个参数传递到中间件中。

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);
}

这会有帮助。

编辑:二零一八年十二月十四日

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

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

在中间件处理程序中,您将在$level之后的变量中获得值one_more_value_to_send

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

hmmo2u0o

hmmo2u0o2#

在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

其结果是:

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

相关问题