1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- EN-Revision: 20765 -->
4 <sect3 id="zend.controller.router.routes.chain">
5 <title>Zend_Controller_Router_Route_Chain</title>
8 <classname>Zend_Controller_Router_Route_Chain</classname>
10 que permite encadenar juntas a múltiples rutas. Esto le permite
12 hostname/rutas y rutas de paths, o múltiples paths de rutas
13 por ejemplo. El encadenamiento
14 puede hacerse programáticamente o dentro
15 de un archivo de configuración.
19 <title>Prioridad de Parámetros</title>
20 <para>Cuando se encadenan en conjunto varias rutas, los parámetros de
21 la ruta exterior tienen
22 mayor prioridad que los parámetros de la
23 ruta interior. Así, si define un controlador en
25 en la ruta interior, será seleccionado el controlador de la ruta
30 Cuando el encadenamiento se realiza prográmaticamente, hay dos
31 maneras de archivarlo. La
32 primera consiste en crear una nueva instancia
33 <classname>Zend_Controller_Router_Route_Chain</classname>
36 <methodname>chain()</methodname>
37 varias veces con todas
38 las rutas que deberían encadenarse juntas. La otra forma es tomar la
39 primera ruta, por ejemplo, la ruta del nombre del host, y llamar al
41 <methodname>chain()</methodname>
42 con la ruta que debería ser
43 anexada a ella. Esto no modificará la ruta del nombre del host,
45 devolverá una nueva instancia de
46 <classname>Zend_Controller_Router_Route_Chain</classname>
48 entonces a ambas rutas encadenadas juntas:
51 <programlisting language="php"><![CDATA[
53 $hostnameRoute = new Zend_Controller_Router_Route_Hostname(...);
54 $pathRoute = new Zend_Controller_Router_Route(...);
56 // Primera manera, encadenarlas con chain route
57 $chainedRoute = new Zend_Controller_Router_Route_Chain();
58 $chainedRoute->chain($hostnameRoute)
61 // Segunda manera, encadenarlas directamente
62 $chainedRoute = $hostnameRoute->chain($pathRoute);
65 <para>Cuando las rutas se encadenan juntas, su separador es una
66 barra ('/'). Pueden haber casos
67 cuando quiera tener un separador
70 <programlisting language="php"><![CDATA[
72 $firstRoute = new Zend_Controller_Router_Route('foo');
73 $secondRoute = new Zend_Controller_Router_Route('bar');
75 // Encadenarlas juntas con un separador diferente
76 $chainedRoute = $firstRoute->chain($secondRoute, '-');
78 // Ensamblar la ruta: "foo-bar"
79 echo $chainedRoute->assemble();
82 <sect4 id="zend.controller.router.routes.chain.config">
83 <title>Encadenar Rutas via Zend_Config</title>
86 Para encadenar juntas a las rutas en un archivo de configuración,
88 adicionales para la configuración de aquellos. El
89 enfoque más sencillo es utilizar los
91 <property>chains</property>
92 . Este es simplemente una lista
93 de las rutas, que será encadenada con la ruta padre. Ni
95 padre ni la ruta hijo serán añadidos directamente al router sino que
97 la ruta del encadenamiento resultante. El nombre de la
98 ruta encadenada en el router será
99 el nombre de la ruta padre
100 concatenada con un guión ('-') con el nombre de la ruta hijo.
103 <acronym>XML</acronym>
107 <programlisting language="xml"><![CDATA[
109 <www type="Zend_Controller_Router_Route_Hostname">
110 <route>www.example.com</route>
112 <language type="Zend_Controller_Router_Route">
113 <route>:language</route>
114 <reqs language="[a-z]{2}">
116 <index type="Zend_Controller_Router_Route_Static">
118 <defaults module="default" controller="index"
121 <imprint type="Zend_Controller_Router_Route_Static">
122 <route>imprint</route>
123 <defaults module="default" controller="index"
130 <users type="Zend_Controller_Router_Route_Hostname">
131 <route>users.example.com</route>
133 <profile type="Zend_Controller_Router_Route">
134 <route>:username</route>
135 <defaults module="users" controller="profile" action="index" />
139 <misc type="Zend_Controller_Router_Route_Static">
146 Esto se traducirá en las tres rutas
147 <command>www-language-index</command>
149 <command>www-language-imprint</command>
151 <command>users-language-profile</command>
153 concordarán basados en el nombre y la ruta
154 <command>misc</command>
155 , que se comparará con cualquier
160 La manera alternativa de crear una ruta encadenada es a través
162 <property>chain</property>
164 utilizarse directamente con el tipo cadena-ruta, y también trabaja
169 <programlisting language="xml"><![CDATA[
171 <www type="Zend_Controller_Router_Route_Chain">
172 <route>www.example.com</route>
174 <language type="Zend_Controller_Router_Route">
175 <route>:language</route>
176 <reqs language="[a-z]{2}">
178 <index type="Zend_Controller_Router_Route_Static">
180 <defaults module="default" controller="index" action="index" />
182 <imprint type="Zend_Controller_Router_Route_Static">
183 <route>imprint</route>
184 <defaults module="default" controller="index" action="index" />
187 <www-index type="Zend_Controller_Router_Route_Chain">
188 <chain>www, language, index</chain>
190 <www-imprint type="Zend_Controller_Router_Route_Chain">
191 <chain>www, language, imprint</chain>
197 También puede darle el parámetro a
198 <property>chain</property>
199 como un array en vez de separ las rutas con comas:
202 <programlisting language="xml"><![CDATA[
204 <www-index type="Zend_Controller_Router_Route_Chain">
206 <chain>language</chain>
209 <www-imprint type="Zend_Controller_Router_Route_Chain">
211 <chain>language</chain>
212 <chain>imprint</chain>
218 When you configure chain routes with
219 <classname>Zend_Config</classname>
221 want the chain name separator to be different from a dash, you
223 separator separately:
226 <programlisting language="php"><![CDATA[
227 $config = new Zend_Config(array(
228 'chainName' => array(
229 'type' => 'Zend_Controller_Router_Route_Static',
232 'subRouteName' => array(
233 'type' => 'Zend_Controller_Router_Route_Static',
236 'module' => 'module',
237 'controller' => 'controller',
245 // Set separator before adding config
246 $router->setChainNameSeparator('_separator_')
249 $router->addConfig($config);
251 // The name of our route now is: chainName_separator_subRouteName
252 echo $this->_router->assemble(array(), 'chainName_separator_subRouteName');
254 // The proof: it echoes /foo/bar