2
0

Zend_Controller-Router-Route-Chain.xml 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <sect3 id="zend.controller.router.routes.chain">
  4. <title>Zend_Controller_Router_Route_Chain</title>
  5. <para>
  6. <classname>Zend_Controller_Router_Route_Chain</classname> es una ruta
  7. que permite encadenar juntas a múltiples rutas.
  8. Esto le permite encadenar hostname/rutas y rutas de paths, o múltiples
  9. paths de rutas por ejemplo. El encadenamiento puede hacerse
  10. programáticamente o dentro de un archivo de configuración.
  11. </para>
  12. <note>
  13. <title>Prioridad de Parámetros</title>
  14. <para>
  15. Cuando se encadenan en conjunto varias rutas, los parámetros de la
  16. ruta exterior tienen mayor prioridad que los parámetros de la ruta
  17. interior. Así, si define un controlador en el exterior y otro en
  18. la ruta interior, será seleccionado el controlador de la ruta exterior.
  19. </para>
  20. </note>
  21. <para>
  22. Cuando el encadenamiento se realiza prográmaticamente, hay dos maneras
  23. de archivarlo. La primera consiste en crear una nueva instancia
  24. <classname>Zend_Controller_Router_Route_Chain</classname> y entones
  25. llamar al método <code>chain</code> varias veces con todas las rutas
  26. que deberían encadenarse juntas. La otra forma es tomar la primera
  27. ruta, por ejemplo, la ruta del nombre del host, y llamar al método
  28. <code>chain</code> con la ruta que debería ser anexada a ella.
  29. Esto no modificará la ruta del nombre del host, pero devolverá una nueva
  30. instancia de <classname>Zend_Controller_Router_Route_Chain</classname>,
  31. teniendo entonces a ambas rutas encadenadas juntas:
  32. </para>
  33. <programlisting role="php"><![CDATA[
  34. // Crear dos rutas
  35. $hostnameRoute = new Zend_Controller_Router_Route_Hostname(...);
  36. $pathRoute = new Zend_Controller_Router_Route(...);
  37. // Primera manera, encadenarlas con chain route
  38. $chainedRoute = new Zend_Controller_Router_Route_Chain();
  39. $chainedRoute->chain($hostnameRoute)
  40. ->chain($pathRoute);
  41. // Segunda manera, encadenarlas directamente
  42. $chainedRoute = $hostnameRoute->chain($pathRoute);
  43. ]]></programlisting>
  44. <para>
  45. Cuando las rutas se encadenan juntas, su separador por defecto es una
  46. barra ('/'). Pueden haber casos cuando quiera tener un separador
  47. diferente:
  48. </para>
  49. <programlisting role="php"><![CDATA[
  50. // Crear dos rutas
  51. $firstRoute = new Zend_Controller_Router_Route('foo');
  52. $secondRoute = new Zend_Controller_Router_Route('bar');
  53. // Encadenarlas juntas con un separador diferente
  54. $chainedRoute = $firstRoute->chain($secondRoute, '-');
  55. // Ensamblar la ruta: "foo-bar"
  56. echo $chainedRoute->assemble();
  57. ]]></programlisting>
  58. <sect4 id="zend.controller.router.routes.chain.config">
  59. <title>Encadenar Rutas via <classname>Zend_Config</classname></title>
  60. <para>
  61. Para encadenar juntas a las rutas en un archivo de configuración,
  62. hay parámetros adicionales para la configuración de aquellos.
  63. El enfoque más sencillo es utilizar los parámetros <code>chains</code>.
  64. Este es simplemente una lista de las rutas, que será encadenada con
  65. la ruta padre. Ni la ruta padre ni la ruta hijo serán añadidos
  66. directamente al router sino que sólo lo hará la ruta del
  67. encadenamiento resultante.
  68. El nombre de la ruta encadenada en el router será el nombre de la
  69. ruta padre concatenada con un guión ('-') con el nombre de la ruta
  70. hijo. Un simple config en XML se vería así:
  71. </para>
  72. <programlisting role="xml"><![CDATA[
  73. <routes>
  74. <www type="Zend_Controller_Router_Route_Hostname">
  75. <route>www.example.com</route>
  76. <chains>
  77. <language type="Zend_Controller_Router_Route">
  78. <route>:language</route>
  79. <reqs language="[a-z]{2}">
  80. <chains>
  81. <index type="Zend_Controller_Router_Route_Static">
  82. <route></route>
  83. <defaults module="default" controller="index" action="index" />
  84. </index>
  85. <imprint type="Zend_Controller_Router_Route_Static">
  86. <route>imprint</route>
  87. <defaults module="default" controller="index" action="index" />
  88. </imprint>
  89. </chains>
  90. </language>
  91. </chains>
  92. </www>
  93. <users type="Zend_Controller_Router_Route_Hostname">
  94. <route>users.example.com</route>
  95. <chains>
  96. <profile type="Zend_Controller_Router_Route">
  97. <route>:username</route>
  98. <defaults module="users" controller="profile" action="index" />
  99. </profile>
  100. </chains>
  101. </users>
  102. <misc type="Zend_Controller_Router_Route_Static">
  103. <route>misc</route>
  104. </misc>
  105. </routes>
  106. ]]></programlisting>
  107. <para>
  108. Esto se traducirá en las tres rutas <code>www-language-index</code>,
  109. <code>www-language-imprint</code> y
  110. <code>users-language-profile</code> que sólo concordarán basados
  111. en el nombre y la ruta <code>misc</code>, que se comparará con
  112. cualquier nombre de host.
  113. </para>
  114. <para>
  115. La manera alternativa de crear una ruta encadenada es a través del
  116. parámetro <code>chain</code>, que sólo puede utilizarse
  117. directamente con el tipo cadena-ruta, y también trabaja en el nivel raíz:
  118. </para>
  119. <programlisting role="xml"><![CDATA[
  120. <routes>
  121. <www type="Zend_Controller_Router_Route_Chain">
  122. <route>www.example.com</route>
  123. </www>
  124. <language type="Zend_Controller_Router_Route">
  125. <route>:language</route>
  126. <reqs language="[a-z]{2}">
  127. </language>
  128. <index type="Zend_Controller_Router_Route_Static">
  129. <route></route>
  130. <defaults module="default" controller="index" action="index" />
  131. </index>
  132. <imprint type="Zend_Controller_Router_Route_Static">
  133. <route>imprint</route>
  134. <defaults module="default" controller="index" action="index" />
  135. </imprint>
  136. <www-index type="Zend_Controller_Router_Route_Chain">
  137. <chain>www, language, index</chain>
  138. </www-index>
  139. <www-imprint type="Zend_Controller_Router_Route_Chain">
  140. <chain>www, language, imprint</chain>
  141. </www-imprint>
  142. </routes>
  143. ]]></programlisting>
  144. <para>
  145. También puede darle el parámetro a <code>chain</code> como un array
  146. en vez de separ las rutas con comas:
  147. </para>
  148. <programlisting role="xml"><![CDATA[
  149. <routes>
  150. <www-index type="Zend_Controller_Router_Route_Chain">
  151. <chain>www</chain>
  152. <chain>language</chain>
  153. <chain>index</chain>
  154. </www-index>
  155. <www-imprint type="Zend_Controller_Router_Route_Chain">
  156. <chain>www</chain>
  157. <chain>language</chain>
  158. <chain>imprint</chain>
  159. </www-imprint>
  160. </routes>
  161. ]]></programlisting>
  162. </sect4>
  163. </sect3>
  164. <!--
  165. vim:se ts=4 sw=4 et:
  166. -->