Passing parameters to middleware in Laravel

athene picture athene · Dec 5, 2016 · Viewed 22.4k times · Source

Let's say I have a route pointing to middleware;

Route::get("/user/{id}", ['middleware' => 'auth', function ($id) {

}]);

And my middleware code is as follows:

public function handle($request, Closure $next)
{
    return $next($request);
}

If I want to use $id in the middleware, how do I do that?

Answer

Saumya Rastogi picture Saumya Rastogi · Dec 5, 2016

In you case you cannot pass $id into the middleware.

Generally you can pass parameters to middleware via using : symbol like this:

Route::get('user/{id}', ['middleware' => 'auth:owner', function ($id) {
    // Your logic here...
}]);

And get the passed parameter into middleware method like this:

<?php

namespace App\Http\Middleware;

use Closure;

class Authentication
{
    public function handle($request, Closure $next, $role)
    {
        if (auth()->check() && auth()->user()->hasRole($role)) {
            return $next($request);
        }

        return redirect('login');
    }
}

Note that the handle() method, which usually only takes a $request and a $next closure, has a third parameter, which is our middleware parameter. If you passed in multiple parameters to your middleware call in the route definition, just add more parameters to your handle() method

Hope this helps!