Disons que j'ai une route pointant vers le middleware;
Route::get("/user/{id}", ['middleware' => 'auth', function ($id) {
}]);
Et mon code middleware est le suivant:
public function handle($request, Closure $next)
{
return $next($request);
}
Si je veux utiliser $id
dans le middleware, comment faire?
Vous pouvez utiliser l'une des méthodes suivantes pour accéder au paramètre de route dans un middleware:
Première méthode
$request->route()->parameters();
Cette méthode renvoie un tableau de tous les paramètres.
Deuxième méthode
$request->route('parameter_name');
Ici parameter_name
fait référence à ce que vous avez appelé le paramètre de l'itinéraire.
Dans ce cas, vous ne pouvez pas passer $id
Dans le middleware.
En général, vous pouvez transmettre des paramètres au middleware en utilisant le symbole :
Comme ceci:
Route::get('user/{id}', ['middleware' => 'auth:owner', function ($id) {
// Your logic here...
}]);
Et obtenez le paramètre passé dans la méthode middleware comme ceci:
<?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');
}
}
Notez que la méthode
handle()
, qui ne prend généralement que$request
Et$next closure
, A unthird parameter
, Qui est notre paramètre middleware. Si vous avez transmis plusieurs paramètres à votre appel middleware dans la définition de l'itinéraire, ajoutez simplement plus de paramètres à votre méthode handle ()
J'espère que cela t'aides!