web-dev-qa-db-fra.com

Passer des paramètres au middleware dans Laravel

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?

12
athene

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.

16
Amit Gupta

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 un third 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!

12
Saumya Rastogi