A free and open-source book on ZF3 for beginners

Translation into this language is not yet finished. You can help this project by translating the chapters and contributing your changes.

5.3. Combiner des types de route

Les routes peuvent être combinées à l'aide de types de routes "agrégés" (voir le tableau 5.2). Les types de routes agrégés permettent de définir des règles de mappage d'URL complexes.

Table 5.2. Types de routes agrégées
Type de route Description
SimpleRouteStack Agrège différents types d'itinéraires dans une liste avec des priorités.
TreeRouteStack Agrège différents types de route dans une structure arborescente.
Part Agrège différents types de route dans un sous-arbre.
Chain Agrège différents types de route dans une chaîne (sous-arbre dégénéré).

Les TreeRouteStack et SimpleRouteStack sont utilisés comme les types de route «de premier niveau». La SimpleRouteStack permet d'organiser différentes routes dans une liste priorisée. Le TreeRouteStack permet d'imbriquer différentes routes dans un "arbre" (arborescence).

La Figure 5.2 montre le diagramme d'héritage de la classe route.

Figure 5.2. Diagramme d'héritage de la classe route Figure 5.2. Diagramme d'héritage de la classe route

Comme vous pouvez le voir à partir de l'image, toutes les classes de route sont héritées de l'interface RouteInterface (nous verrons cette interface en détails dans la section Écrire son propre type de route plus loin dans ce chapitre). SimpleRouteStack est une classe parente de la classe TreeRouteStack, qui hérite du comportement de la pile de route simple (permet d'organiser les routes dans une liste priorisée) et l'étend (permet d'organiser les routes dans des sous-arbres). Les classes Part et Chain sont dérivées de la classe TreeRouteStack et sont utilisées en interne par TreeRouteStack pour créer des sous-arbres et des routes enfants.

5.3.1. Pile de routage simple

La SimpleRouteStack permet de combiner différentes routes dans une liste priorisée. Pour un exemple de ce type de liste, regardez la pile de route dans la partie gauche de la figure 5.3. La liste d'exemples contient plusieurs routes littérales et quelques routes segment.

Lors de la comparaison avec la requête HTTP, SimpleRouteStack parcourt la liste des routes et essaie de faire correspondre chaque route à tour de rôle. Chaque route de la liste a une priorité; les routes avec la priorité la plus élevée sont visitées en premier. La recherche est terminée une fois qu'une route correspond à la requête HTTP. Si aucune route ne correspond, l'erreur "not found" est déclenchée.

Figure 5.3. Un exemple de pile de routage simple (gauche) et de pile de routage arborescente (droite) Figure 5.3. Un exemple de pile de routage simple (gauche) et de pile de routage arborescente (droite)

5.3.2. Pile de routage en arborescence

La classe TreeRouteStack étend la classe SimpleRouteStack, ce qui signifie qu'elle peut organiser des routes en liste priorisée, et qu'elle permet d'imbriquer des routes dans des sous-arbres et des chaînes. Un exemple de pile de routage arborescent est présenté dans la partie droite de la figure 5.3. La liste contient une route Literal, une chaîne de routes Literal et Segment, et une sous-arborescence composée de deux branches : une branche contenant une route Segment unique et une branche constituée de routes Scheme, Hostname et Segment.

Le tree route stack (pile de route en arborescence) effectue une correspondance de requête de la manière suivante. Il parcourt les éléments de sa liste priorisée (indiqués par des pointillés dans la figure 5.3) en commençant par les itinéraires priorisé. Si une certaine partie est une route de Chain ou une partie (Part) de route, il traite cet itinéraire imbriqué de son itinéraire parent vers les enfants. Si la route parent correspond, les enfants (indiqués par des traits pleins) sont alors analysés. L'itinéraire imbriqué est considéré comme correspondant si au moins une route correspond à chaque niveau d'arbre (ou de chaîne).

Chaque route dans un arbre (ou une chaîne) consomme une partie de l'URL (figure 5.4). La route parent est comparée à la première partie de l'URL, son enfant est à nouveau mis en correspondance avec la partie suivante, et ainsi de suite jusqu'à ce que la fin de la chaîne d'URL soit atteinte.

Figure 5.4. Un exemple de correspondance de route imbriquée Figure 5.4. Un exemple de correspondance de route imbriquée


Top