Search code examples
phplaravellaravel-5laravel-routinglaravel-middleware

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


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.


Solution

  • 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