[ZF-10089] Zend_Log
[zend.git] / documentation / manual / es / module_specs / Zend_Controller-Router-Route-Chain.xml
blobcc33207c8ed259853602815cfd75ebf364158d5b
1 <?xml version="1.0" encoding="UTF-8"?>
2     <!-- EN-Revision: 20765 -->
3     <!-- Reviewed: no -->
4 <sect3 id="zend.controller.router.routes.chain">
5     <title>Zend_Controller_Router_Route_Chain</title>
7     <para>
8         <classname>Zend_Controller_Router_Route_Chain</classname>
9         es una ruta
10         que permite encadenar juntas a múltiples rutas. Esto le permite
11         encadenar
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.
16     </para>
18     <note>
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
24             el exterior y otro
25             en la ruta interior, será seleccionado el controlador de la ruta
26             exterior.</para>
27     </note>
29     <para>
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>
34         y entones
35         llamar al método
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
40         método
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,
44         pero
45         devolverá una nueva instancia de
46         <classname>Zend_Controller_Router_Route_Chain</classname>
47         , teniendo
48         entonces a ambas rutas encadenadas juntas:
49     </para>
51     <programlisting language="php"><![CDATA[
52 // Crear dos rutas
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)
59              ->chain($pathRoute);
61 // Segunda manera, encadenarlas directamente
62 $chainedRoute = $hostnameRoute->chain($pathRoute);
63 ]]></programlisting>
65     <para>Cuando las rutas se encadenan juntas, su separador es una
66         barra ('/'). Pueden haber casos
67         cuando quiera tener un separador
68         diferente:</para>
70     <programlisting language="php"><![CDATA[
71 // Crear dos rutas
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();
80 ]]></programlisting>
82     <sect4 id="zend.controller.router.routes.chain.config">
83         <title>Encadenar Rutas via Zend_Config</title>
85         <para>
86             Para encadenar juntas a las rutas en un archivo de configuración,
87             hay parámetros
88             adicionales para la configuración de aquellos. El
89             enfoque más sencillo es utilizar los
90             parámetros
91             <property>chains</property>
92             . Este es simplemente una lista
93             de las rutas, que será encadenada con la ruta padre. Ni
94             la ruta
95             padre ni la ruta hijo serán añadidos directamente al router sino que
96             sólo lo hará
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.
101             Un
102             simple config en
103             <acronym>XML</acronym>
104             se vería así:
105         </para>
107         <programlisting language="xml"><![CDATA[
108 <routes>
109     <www type="Zend_Controller_Router_Route_Hostname">
110         <route>www.example.com</route>
111         <chains>
112             <language type="Zend_Controller_Router_Route">
113                 <route>:language</route>
114                 <reqs language="[a-z]{2}">
115                 <chains>
116                     <index type="Zend_Controller_Router_Route_Static">
117                         <route></route>
118                         <defaults module="default" controller="index"
119                                   action="index" />
120                     </index>
121                     <imprint type="Zend_Controller_Router_Route_Static">
122                         <route>imprint</route>
123                         <defaults module="default" controller="index"
124                                   action="index" />
125                     </imprint>
126                 </chains>
127             </language>
128         </chains>
129     </www>
130     <users type="Zend_Controller_Router_Route_Hostname">
131         <route>users.example.com</route>
132         <chains>
133             <profile type="Zend_Controller_Router_Route">
134                 <route>:username</route>
135                 <defaults module="users" controller="profile" action="index" />
136             </profile>
137         </chains>
138     </users>
139     <misc type="Zend_Controller_Router_Route_Static">
140         <route>misc</route>
141     </misc>
142 </routes>
143 ]]></programlisting>
145         <para>
146             Esto se traducirá en las tres rutas
147             <command>www-language-index</command>
148             ,
149             <command>www-language-imprint</command>
150             y
151             <command>users-language-profile</command>
152             que sólo
153             concordarán basados en el nombre y la ruta
154             <command>misc</command>
155             , que se comparará con cualquier
156             nombre de host.
157         </para>
159         <para>
160             La manera alternativa de crear una ruta encadenada es a través
161             del parámetro
162             <property>chain</property>
163             , que sólo puede
164             utilizarse directamente con el tipo cadena-ruta, y también trabaja
165             en el
166             nivel raíz:
167         </para>
169         <programlisting language="xml"><![CDATA[
170 <routes>
171     <www type="Zend_Controller_Router_Route_Chain">
172         <route>www.example.com</route>
173     </www>
174     <language type="Zend_Controller_Router_Route">
175         <route>:language</route>
176         <reqs language="[a-z]{2}">
177     </language>
178     <index type="Zend_Controller_Router_Route_Static">
179         <route></route>
180         <defaults module="default" controller="index" action="index" />
181     </index>
182     <imprint type="Zend_Controller_Router_Route_Static">
183         <route>imprint</route>
184         <defaults module="default" controller="index" action="index" />
185     </imprint>
187     <www-index type="Zend_Controller_Router_Route_Chain">
188         <chain>www, language, index</chain>
189     </www-index>
190     <www-imprint type="Zend_Controller_Router_Route_Chain">
191         <chain>www, language, imprint</chain>
192     </www-imprint>
193 </routes>
194 ]]></programlisting>
196         <para>
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:
200         </para>
202         <programlisting language="xml"><![CDATA[
203 <routes>
204     <www-index type="Zend_Controller_Router_Route_Chain">
205         <chain>www</chain>
206         <chain>language</chain>
207         <chain>index</chain>
208     </www-index>
209     <www-imprint type="Zend_Controller_Router_Route_Chain">
210         <chain>www</chain>
211         <chain>language</chain>
212         <chain>imprint</chain>
213     </www-imprint>
214 </routes>
215 ]]></programlisting>
217         <para>
218             When you configure chain routes with
219             <classname>Zend_Config</classname>
220             and
221             want the chain name separator to be different from a dash, you
222             need to specify this
223             separator separately:
224         </para>
226         <programlisting language="php"><![CDATA[
227 $config = new Zend_Config(array(
228     'chainName' => array(
229         'type'   => 'Zend_Controller_Router_Route_Static',
230         'route'  => 'foo',
231         'chains' => array(
232             'subRouteName' => array(
233                 'type'     => 'Zend_Controller_Router_Route_Static',
234                 'route'    => 'bar',
235                 'defaults' => array(
236                     'module'      => 'module',
237                      'controller' => 'controller',
238                      'action'     => 'action'
239                 )
240             )
241         )
242     )
245 // Set separator before adding config
246 $router->setChainNameSeparator('_separator_')
248 // Add config
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
255 ]]></programlisting>
257     </sect4>
258 </sect3>