Lorsque vous créez un site de taille significative dans Laravel, votre fichier de routes devient souvent assez volumineux. Une des premières choses que je fais dans un nouveau site est de regrouper mes routes par sections logiquement distinctes comme “admin”, “auth”, “public”. Généralement, chacun de ces groupes dispose de son propre ensemble de middleware. L’administrateur, par exemple, obtient auth
. Peut-être que le groupe API obtient un autre auth
middleware, et il pourrait obtenir un limiteur de débit spécifique à l’API ou autre chose.
Laravel 5.2 a introduit quelque chose appelé groupes de middleware, qui sont essentiellement un raccourci pour appliquer un plus grand groupe de middleware, en utilisant une seule clé.
Remarque : même si vous ne souhaitez pas utiliser l’aspect “raccourcis” du middleware des groupes de middleware, vous devriez continuer à lire, car il s’agit d’un changement important dans la pile middleware globale de Laravel.
Alors, souvenez-vous de mon exemple d’administrateur ci-dessus ? Nous pouvons maintenant créer un groupe middleware “admin”. Apprenons comment.
Définition des groupes de middleware
Vous pouvez définir des groupes middleware dans app\Http\Kernel.php
. Il y a une nouvelle propriété nommée $middlewareGroups
c’est un tableau ; chaque clé est un nom et chaque valeur est le middleware correspondant.
Hors de la boîte, il est livré avec web
et api
:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
],
'api' => [
'throttle:60,1',
],
];
Comme vous pouvez le voir, les clés peuvent faire référence à une classe ou à un raccourci middleware spécifique à l’itinéraire comme throttle
ou auth
. Faisons un admin
groupe:
protected $middlewareGroups = [
'web' => [...],
'api' => [...],
'admin' => [
'web',
'auth',
]
];
Nous avons défini que le admin
est un groupe qui utilise web
(un autre groupe) et auth
(un middleware de route nommé). C’est ça!
Changements depuis la 5.1
Vous remarquerez peut-être que le middleware dans web
sont ceux qui étaient appliqués à chaque route dans Laravel 5.1 et avant. C’est un assez grand changement de mentalité, alors veuillez en prendre note : tout ce qui n’est pas donné web
le middleware n’aura pas de cookies ou de session ou CSRF fonctionnel.
Cela signifie également que nous avons beaucoup plus de flexibilité : cela nous libère pour avoir plus de couches d’API sans état qui ne nous offrent pas la commodité des cookies et des sessions. Nous pouvons nous débarrasser de la plupart des intergiciels universels – si vous jetez un coup d’œil, le seul intergiciel universel de la version 5.2 est l’intergiciel de “vérification du mode de maintenance”.
Notez également que toutes les API qui reposent sur des cookies ou des sessions (ou CSRF) ne fonctionneront pas si elles sont bloquées sous ce api
groupe, donc si vous avez des API avec état, vous devrez apporter quelques modifications à cette valeur par défaut api
groupe.
Utiliser des groupes middleware
OK, nous savons donc comment définir un groupe middleware. Comment l’utilisons-nous ?
Ce sera clair quand vous regardez la valeur par défaut routes.php
en 5.2 :
Route::get("https://mattstauffer.com/", function () {
return view('welcome');
});
Route::group(['middleware' => ['web']], function () {
//
});
Comme vous pouvez le voir, vous l’utilisez comme n’importe quel middleware de route comme auth
: il suffit de mettre la clé soit comme valeur directe de middleware
ou dans un tableau qui est la valeur de middleware
. Alors, voici notre admin
groupe middleware utilisé :
Route::group(['middleware' => 'admin'], function () {
Route::get('dashboard', function () {
return view('dashboard');
});
});
C’est ça! Apprécier!
Remarque : plus tard dans Laravel 5.2, toutes les routes dans
routes.php
sont maintenant emballés avec leweb
groupe middleware par défaut. J’essaierai d’écrire cela plus tard, mais jetez un oeil à laRouteServiceProvider
pour voir comment tout cela fonctionne.