Zend_Controller_Router_Route_Chain
Zend_Controller_Router_Route_Chain es una ruta
que permite encadenar juntas a múltiples rutas.
Esto le permite encadenar hostname/rutas y rutas de paths, o múltiples
paths de rutas por ejemplo. El encadenamiento puede hacerse
programáticamente o dentro de un archivo de configuración.
Prioridad de Parámetros
Cuando se encadenan en conjunto varias rutas, los parámetros de la
ruta exterior tienen mayor prioridad que los parámetros de la ruta
interior. Así, si define un controlador en el exterior y otro en
la ruta interior, será seleccionado el controlador de la ruta exterior.
Cuando el encadenamiento se realiza prográmaticamente, hay dos maneras
de archivarlo. La primera consiste en crear una nueva instancia
Zend_Controller_Router_Route_Chain y entones
llamar al método chain varias veces con todas las rutas
que deberían encadenarse juntas. La otra forma es tomar la primera
ruta, por ejemplo, la ruta del nombre del host, y llamar al método
chain con la ruta que debería ser anexada a ella.
Esto no modificará la ruta del nombre del host, pero devolverá una nueva
instancia de Zend_Controller_Router_Route_Chain,
teniendo entonces a ambas rutas encadenadas juntas:
chain($hostnameRoute)
->chain($pathRoute);
// Segunda manera, encadenarlas directamente
$chainedRoute = $hostnameRoute->chain($pathRoute);
]]>
Cuando las rutas se encadenan juntas, su separador por defecto es una
barra ('/'). Pueden haber casos cuando quiera tener un separador
diferente:
chain($secondRoute, '-');
// Ensamblar la ruta: "foo-bar"
echo $chainedRoute->assemble();
]]>
Encadenar Rutas via Zend_Config
Para encadenar juntas a las rutas en un archivo de configuración,
hay parámetros adicionales para la configuración de aquellos.
El enfoque más sencillo es utilizar los parámetros chains.
Este es simplemente una lista de las rutas, que será encadenada con
la ruta padre. Ni la ruta padre ni la ruta hijo serán añadidos
directamente al router sino que sólo lo hará la ruta del
encadenamiento resultante.
El nombre de la ruta encadenada en el router será el nombre de la
ruta padre concatenada con un guión ('-') con el nombre de la ruta
hijo. Un simple config en XML se vería así:
www.example.com
:language
imprint
users.example.com
:username
misc
]]>
Esto se traducirá en las tres rutas www-language-index,
www-language-imprint y
users-language-profile que sólo concordarán basados
en el nombre y la ruta misc, que se comparará con
cualquier nombre de host.
La manera alternativa de crear una ruta encadenada es a través del
parámetro chain, que sólo puede utilizarse
directamente con el tipo cadena-ruta, y también trabaja en el nivel raíz:
www.example.com
:language
imprint
www, language, index
www, language, imprint
]]>
También puede darle el parámetro a chain como un array
en vez de separ las rutas con comas:
www
language
index
www
language
imprint
]]>