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 like auth:owner,subscription
to your middleware
call in the route definition, just add more parameters to your
handle method which will look like this - handle($request, Closure $next, $role,$subscription)