technologie de routage des paquets
Regroupement d'itinéraires
Utilisez la méthode de groupe de la classe Route pour enregistrer et définir certains paramètres de définition d'itinéraire courants pour le routage de groupe, par exemple :
Route::group('blog', function () { Route::rule(':id', 'blog/read'); Route::rule(':name', 'blog/read'); })->ext('html')->pattern(['id' => '\d+', 'name' => '\w+']);
Le routage de groupe prend en charge tous les paramètres de routage, l'utilisation de Paramètres spécifiques Veuillez vous référer au chapitre Paramètres de routage.
S'il est simplement utilisé pour définir certains paramètres de routage courants (également appelés groupes virtuels) pour certaines règles de routage, vous pouvez également utiliser :
Route::group(function () { Route::rule('blog/:id', 'blog/read'); Route::rule('blog/:name', 'blog/read'); })->ext('html')->pattern(['id' => '\d+', 'name' => '\w+']);
Les groupes de routage prennent en charge l'imbrication, par exemple :
Route::group(function () { Route::group('blog', function () { Route::rule(':id', 'blog/read'); Route::rule(':name', 'blog/read'); }); })->ext('html')->pattern(['id' => '\d+', 'name' => '\w+']);
Si des groupes imbriqués sont utilisés dans ce Dans ce cas, le groupe enfant héritera des paramètres et règles variables du groupe parent, et les paramètres et règles variables définis dans les règles de routage finales auront priorité.
Vous pouvez utiliser la méthode du préfixe pour simplifier la définition de la même adresse d'itinéraire. Par exemple, la définition suivante
Route::group('blog', function () { Route::get(':id', 'blog/read'); Route::post(':id', 'blog/update'); Route::delete(':id', 'blog/delete'); })->ext('html')->pattern(['id' => '\d+']);
peut être simplifiée en
Route::group('blog', function () { Route::get(':id', 'read'); Route::post(':id', 'update'); Route::delete(':id', 'delete'); })->prefix('blog/')->ext('html')->pattern(['id' => '\d+']);
Correspondance exacte de l'itinéraire
Si vous souhaitez que tous les itinéraires soient sous un groupe. pour utiliser la correspondance exacte, vous pouvez utiliser
Route::group('blog', function () { Route::get(':id', 'read'); Route::post(':id', 'update'); Route::delete(':id', 'delete'); })->completeMatch()->prefix('blog/')->ext('html')->pattern(['id' => '\d+']);
Résolution de route retardée
prend en charge la résolution de route retardée, ce qui signifie que les règles de routage que vous définissez (principalement les règles de routage de groupe et de routage de nom de domaine) ne sont pas réellement enregistrées lors du chargement du Fichier de définition de routage, mais correspondent Ce n'est que lorsque le groupe de routage ou le nom de domaine est atteint que l'enregistrement et la résolution seront réellement effectués, ce qui améliore considérablement les performances d'enregistrement et de résolution du routage.
L'analyse de route retardée est désactivée par défaut. Vous pouvez la définir dans le fichier de configuration de routage :
// 开启路由延迟解析 'url_lazy_route' => true,
Après avoir activé l'analyse de route retardée, si vous devez générer une URL de décryptage de route, vous devez utiliser la commande de ligne de commande
php think optimize:route
pour générer l'analyse du cache de route.
La définition de routes via des groupes de routage ou le routage de noms de domaine peut profiter d'une résolution retardée.
Une fois la résolution différée du routage activée, les routes de nom de domaine et les routes de groupe définies seront retardées et résolues, c'est-à-dire que les règles de routage ne seront enregistrées qu'une fois le nom de domaine ou le groupe effectivement mis en correspondance pour éviter un enregistrement inutile. et la résolution.
Fusionner et analyser les règles de routage
Les règles de routage sous le même groupe de routage prennent en charge l'analyse fusionnée sans parcourir toutes les règles de routage sous le groupe de routage, ce qui peut considérablement améliorer les performances de l'analyse des routes.
L'utilisation de l'activation séparée de l'analyse des règles de fusion pour un certain groupe est la suivante :
Route::group('user', function () { Route::rule('hello/:name','hello'); Route::rule('think/:name','think'); })->mergeRuleRegex();
De cette façon, toutes les règles de routage du groupe ne doivent être mises en correspondance et vérifiées qu'une seule fois, quel que soit le nombre défini (en fait seulement celles qui correspondent au type de demande actuel seront fusionnées et vérifiées (règles de routage).
La méthode mergeRuleRegex ne peut être utilisée que pour le routage de groupes ou le routage de noms de domaine (le routage de noms de domaine est en fait un groupe spécial).
Ou configurez des règles de fusion globales dans le fichier de configuration de routage (valable pour tous les groupes)
// 开启路由合并解析 'route_rule_merge' => true,
Transmettez des paramètres supplémentaires
Vous pouvez transmettre des paramètres supplémentaires pour regrouper le routage de manière unifiée
Route::group('blog', [ ':id' => 'Blog/read', ':name' => 'Blog/read', ])->ext('html') ->pattern(['id' => '\d+']) ->append(['group_id' => 1]);
Le groupe ci-dessus le routage est unifié. Le paramètre group_id est ajouté et la valeur de ce paramètre peut être obtenue via la méthode param de la classe Request.