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.4. Configuración del Routing

Típicamente no creamos al pila de rutas (o árbol) nosotros mismos en su lugar le damos las instrucciones a ZF3 sobre como hacer esto.

La configuración del routing para un módulo se guarda en el archivo de configuración module.config.php:

The routing configuration for a module is stored in module.config.php configuration file:

<?php
use Zend\Router\Http\TreeRouteStack;

return [
    //...
    'router' => [
        'router_class' => TreeRouteStack::class,
        'routes' => [
            // Register your routing rules here...
        ],
        'default_params' => [
            // Specify default parameters here for all routes here ...
        ]
    ],
];

Arriba en la línea 6 tenemos la llave router y debajo de esta está la subllave routes (línea 8) que contiene las reglas de routing.

Podemos especificar la clase de ruta de primer nivel a usar modificando (tanto TreeRouteStack o SimpleRouteStack) el parámetro router_class (línea 7). Si este parámetro no está presente la clase TreeRouteStack se usa por defecto.

Podemos usar la llave opcional default_params (línea 11) para definir los valores por defecto de los parámetros para todas las rutas. Sin embargo, generalmente no usamos esta llave y definimos los valore por defecto en la base de cada ruta.

Mostraremos como extraer parámetros de la ruta más adelante en este capítulo.

5.4.1. Configurar Rutas Simples

Una ruta típica tiene un name, un type y unas options:

La configuración para cada ruta bajo la subllave routes puede tener el siguiente formato:

'<route_name>' => [
    'type' => '<route_type_class>',
    'priority' => <priority>,
    'options' => [
        'route' => '<route>',
        'defaults' => [
            //...
        ],
    ],
]

Arriba <route_name> es una variable que debería ser el nombre de la ruta. El nombre de una ruta debe estar en minúsculas, por ejemplo, "home" o "about". La llave type especifica el nombre completo de la clase ruta.

La llave opcional priority permite definir la prioridad (que debe ser un número entero) de la ruta dentro de la lista de prioridades (las rutas con una prioridad mayor se visitarán primero). Si se omite la llave priority las rutas se visitan en orden LIFO 4.

Las rutas que tienen igual prioridad se visitaran en un orden LIFO. Por esta razón para conseguir un mejor rendimiento debemos registrar las rutas que coincidirán más a menudo en último lugar y registrar las rutas menos comunes al principio.

4) LIFO (siglas en ingles para Last In, First Out) se usa para organizar elementos en una pila donde el elemento más alto es el que se agrega de último y es el primero que se quita.

La llave options define el arreglo de opciones de ruta. Discutiremos las opciones en la siguiente sección de este capítulo.

5.4.2. Configurar Rutas Anidadas

Para organizar rutas en subárboles agregamos la llave child_routes a la definición de la ruta y agregamos las rutas hijas debajo de esta llave, de la siguiente manera:

'<route_name>' => [
    'type' => '<route_type_class>',
    'priority' => <priority>,
    'options' => [
        //...
    ],
    'child_routes' => [
        // Add child routes here.
        // ...
    ]
],

Si necesitamos organizar las rutas en una cadena (subárbol degenerativo) agregamos la llave chain_routes a la configuración de la ruta.

'<route_name>' => [
    'type' => '<route_type_class>',
    'priority' => <priority>,
    'options' => [
        //...
    ],
    'chain_routes' => [
        // Add chained routes here.
        // ...
    ]
],

Mirando los dos ejemplos de arriba no veremos el uso explicito de los tipos de ruta Part y Chain por que (para nuestra conveniencia) ellas son usadas automáticamente por ZF3 cuando encuentra las llaves child_routes y chain_routes en nuestra configuración de routing.

5.4.3. Configuración por Defecto del Routing in Zend Skeleton Application

Ahora que sabemos como configurar y organizar rutas en estructuras compuestas, vamos a mirar un ejemplo de la vida real. En una Zend Skeleton Application fresca la configuración de routing se ve de la siguiente manera:

<?php
use Zend\Router\Http\Literal;
use Zend\Router\Http\Segment;

return [
    'router' => [
        'routes' => [
            'home' => [
                'type' => Literal::class,
                'options' => [
                    'route'    => '/',
                    'defaults' => [
                        'controller' => Controller\IndexController::class,
                        'action'     => 'index',
                    ],
                ],
            ],
            'application' => [
                'type'    => Segment::class,
                'options' => [
                    'route'    => '/application[/:action]',
                    'defaults' => [
                        'controller'    => Controller\IndexController::class,
                        'action'        => 'index',
                    ],
                ],
            ],
        ],
    ],

  //...
];

En la configuración presentada arriba tenemos listadas dos reglas de routing una luego de otra: primero tenemos la ruta "home" (línea 8) y luego tenemos la ruta "application" (línea).

La ruta "home" hace corresponder la ruta URL vacía con la acción "index" del controlador IndexController. Por ejemplo, escribimos en nuestro navegador "http://localhost/" para ver la pagina Home de nuestro sitio. Esta ruta es de typo "Literal".

La ruta "application" (de tipo "Segment") hace corresponder las URL que tienen un aspecto como "http://localhost/application", "http://localhost/application/about", "http://localhost/application/news", etc, con la acción del controlador IndexController. El nombre exacto de la acción se determina con el parámetro de "acción". El valor por defecto para este parámetro es "index". Esto significa que si no especificamos ninguna acción la solicitud se envía a la acción "index".

Esta configuración corresponde a la pila de rutas en árbol se muestra en la figura 5.5:

Figure 5.5. Pila de ruta por defecto en la Skeleton Application Figure 5.5. Pila de ruta por defecto en la Skeleton Application

En las siguientes secciones daremos más ejemplos sobre como usar los tipos de rutas en nuestro sitio web.


Top