Laravel - How to pass variables to middleware through route group?

Gaurav Deshpande picture Gaurav Deshpande · Mar 16, 2017 · Viewed 8.8k times · Source

This is my route group,

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

And this is my middleware checkUserLevel,

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

        return $next($request);
    }

I want to pass the $level variale to middleware from route group. Thanks.

Answer

Parantap Parashar picture Parantap Parashar · Mar 16, 2017

You can simply pass multiple arguments into the middleware using a colon. Use it like:

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

Now, you can have this value inside your $level variable.

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

    return $next($request);
}

This would help.


Edit: 14 Dec 2018

You can also send multiple variables to middleware. You just need to seperate the values using a comma (,).

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

And you will get the value one_more_value_to_send in the variable after $level in the middleware handler.

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

   return $next($request);
}

For more details you can refer to: Passing parameters to Middleware in Laravel 5.1