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. Combinar Tipos de Ruta

Las rutas se pueden combinar con la ayuda del tipo de ruta "aggregate" (ver tabla 5.2). Los tipos de ruta compuestos permiten definir arbitrariamente reglas complejas para la comparación de URL.

Table 5.2. Tipo de Ruta Aggregate
Tipo de Ruta Descripción
SimpleRouteStack Agregar diferentes tipos de rutas en una lista con prioridades.
TreeRouteStack Agregar diferentes tipos de rutas en una estructura tipo árbol.
Part Agregar diferentes tipos de rutas a un sub árbol.
Chain Agregar diferentes tipos de rutas a una cadena (sub árbol degenerativo).

Los tipos de ruta TreeRouteStack y SimpleRouteStack se usan como los tipos de ruta de primer nivel. El tipo de ruta SimpleRouteStack permite organizar diferentes rutas en una lista con prioridades. TreeRouteStack permite anidar diferentes rutas formando un árbol.

La figura 5.2 muestra el diagrama de herencia de la clase route.

Figure 5.2. Diagrama de herencia de la clase route Figure 5.2. Diagrama de herencia de la clase route

Como podemos ver en la imagen, todas las clases de ruta heredan de la interface RouteInterface (revisaremos más detalladamente esta interface en la sección Escribir un Tipo de Ruta Propia que está más adelante en esta sección). SimpleRouteStack es la clase padre de la clase TreeRouteStack, esta hereda su comportamiento de la clase padre (permitiendo organizar las rutas en un lista con prioridades) y lo extiende (permitiendo organizar rutas en sub árboles). Las clases Part y Chain se derivan de la clase TreeRouteStack que las usa internamente para construir sub árboles y cadenas de rutas hijas.

5.3.1. Simple Route Stack

El SimpleRouteStack permite combinar diferentes rutas en una lista con prioridades. Un ejemplo de una lista como esta se puede ver en la pila de rutas de la parte izquierda de la figura 5.3. La lista de ejemplo contiene varias rutas Literal y varias rutas Segment.

Cuando se prueba la coincidencia con la petición HTTP, SimpleRouteStack recorre la lista de rutas e intenta hacer coincidir cada ruta. Cada ruta de la lista tiene una prioridad; la ruta con la mayor prioridad se visita primero. La búsqueda termina una vez que alguna ruta coincide con la petición HTTP. Si ninguna ruta coincide el error "not fount" se lanza.

Figure 5.3. Un ejemplo de Simple Route Stack (izquierda) y Tree Route Stack (derecha) Figure 5.3. Un ejemplo de Simple Route Stack (izquierda) y Tree Route Stack (derecha)

5.3.2. Tree Route Stack

La clase TreeRouteStack extiende de la clase SimpleRouteStack lo que significa que esta se puede organizar en una lista de prioridades, además, provee la capacidad de anidar rutas en subárboles y cadenas. Una ejemplo de una pila de rutas en árbol se presenta en la parte derecha de la figura 5.3. La lista contiene una ruta Literal, una cadena de rutas Literal y Segment, y un subárbol con dos ramas: una rama contiene una ruta única Segment y otra rama contiene rutas Scheme, Hostname y Segment.

La pila de rutas en árbol ejecuta la comparación con la petición de la siguiente manera. Esta recorre los elementos de la lista de prioridades (con líneas punteadas en la figura 5.3), comenzando con las rutas de más alta prioridad. Si un elemento determinado es una ruta Chain o una ruta Part, se procesa cada ruta anidada desde su ruta padre al hijo. Si la ruta padre coincide, los hijos (en líneas solidas) se analizan. La ruta anidada se considera coincidente si al menos una ruta coincide en algún nivel del árbol (o cadena).

Cada ruta en el árbol (o cadena) consume una parte de la URL (figura 5.4). La ruta padre se compara contra la primera parte de la URL, el hijo se compara con la segunda parte y así sucesivamente hasta el final de la cadena URL.

Figure 5.4. Un ejemplo de la comparación anidada de rutas Figure 5.4. Un ejemplo de la comparación anidada de rutas


Top