Zend_Controller-Basics.xml 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.controller.basics">
  5. <title>Conceptos Básicos de Zend_Controller</title>
  6. <para>
  7. El sistema
  8. <classname>Zend_Controller</classname>
  9. está diseñado para
  10. ser liviano, modular y extensible. Se trata de un diseño minimalista
  11. para
  12. permitir flexibilidad y cierta libertad para los usuarios
  13. proporcionando al mismo tiempo una
  14. estructura suficiente para que sistemas
  15. construidos alrededor de
  16. <classname>Zend_Controller</classname>
  17. compartan algunas convenciones y layouts de código similares.
  18. </para>
  19. <para>
  20. El siguiente diagrama muestra el flujo de trabajo, y la narrativa
  21. que le sigue describe en
  22. detalle las interacciones:
  23. </para>
  24. <para>
  25. <inlinegraphic width="483" scale="100" align="center" valign="middle"
  26. fileref="figures/zend.controller.basics.png" format="PNG"/>
  27. </para>
  28. <para>
  29. El flujo de procesos de
  30. <classname>Zend_Controller</classname>
  31. está implementado
  32. por varios componentes. Si bien no es necesario entender los cimientos
  33. de
  34. todos estos componentes para utilizar el sistema, tener un
  35. conocimiento práctico del proceso
  36. es de mucha utilidad.
  37. </para>
  38. <itemizedlist>
  39. <listitem>
  40. <para>
  41. <classname>Zend_Controller_Front</classname>
  42. organiza todo
  43. el flujo de trabajo del sistema
  44. <classname>Zend_Controller</classname>
  45. .
  46. Es una interpretación del patrón FrontController.
  47. <classname>Zend_Controller_Front</classname>
  48. procesa todas
  49. las solicitudes recibidas por el servidor y es responsable
  50. en última instancia de la delegación de las solicitudes a los
  51. ActionControllers
  52. (
  53. <classname>Zend_Controller_Action</classname>
  54. ).
  55. </para>
  56. </listitem>
  57. <listitem>
  58. <para>
  59. <classname>Zend_Controller_Request_Abstract</classname>
  60. (a
  61. menudo denominado
  62. <emphasis>Request Object</emphasis>
  63. ) representa
  64. el entorno de la solicitud y ofrece métodos para
  65. establecer y recuperar el controlador, los nombres de las
  66. acciones y cualquier parámetro de solicitud. Además realiza un seguimiento
  67. de si la acción que contiene ha sido enviada o no
  68. por
  69. <classname>Zend_Controller_Dispatcher</classname>
  70. .
  71. Se pueden usar extensiones del objeto abstracto para
  72. encapsular toda el entorno de la solicitud,
  73. permitiendo a los routers traer información del ámbito
  74. de la solicitud a fin de establecer el controlador
  75. y los nombres de acción.
  76. </para>
  77. <para>
  78. Por defecto, se usa
  79. <classname>Zend_Controller_Request_Http</classname>
  80. , el cual
  81. proporciona acceso a todo el ámbito de la petición
  82. <acronym>HTTP</acronym>
  83. .
  84. </para>
  85. </listitem>
  86. <listitem>
  87. <para>
  88. <classname>Zend_Controller_Router_Interface</classname>
  89. se usa para definir routers. El ruteo es el proceso de
  90. examinar el ámbito de la solicitud para determinar
  91. qué controlador, y qué acción del controlador debe recibir
  92. la solicitud. Este controlador, la acción, y los parámetros
  93. opcionales son luego establecidos en el objeto de la solicitud
  94. para ser procesados por
  95. <classname>Zend_Controller_Dispatcher_Standard</classname>
  96. .
  97. El ruteo (routing) ocurre sólo una vez: cuando la solicitud
  98. se recibe inicialmente y antes de enviar el primer
  99. controlador.
  100. </para>
  101. <para>
  102. El router por defecto,
  103. <classname>Zend_Controller_Router_Rewrite</classname>
  104. ,
  105. toma el punto final de una
  106. <acronym>URI</acronym>
  107. como se especificó en
  108. <classname>Zend_Controller_Request_Http</classname>
  109. y la descompone en un controlador, una acción y parámetros,
  110. basándose en la información de la ruta del url.
  111. Como ejemplo, la
  112. <acronym>URL</acronym>
  113. <filename>http://localhost/foo/bar/key/value</filename>
  114. se
  115. decodificará para usar el controlador
  116. <emphasis>foo</emphasis>
  117. ,
  118. la acción
  119. <emphasis>bar</emphasis>
  120. y especificar un parámetro
  121. <emphasis>key</emphasis>
  122. con el valor de
  123. <emphasis>value</emphasis>
  124. .
  125. </para>
  126. <para>
  127. <classname>Zend_Controller_Router_Rewrite</classname>
  128. también puede ser utilizado para igualar las rutas arbitrarios;
  129. para más información, ver
  130. <link linkend="zend.controller.router">documentación
  131. del router</link>
  132. .
  133. </para>
  134. </listitem>
  135. <listitem>
  136. <para>
  137. <classname>Zend_Controller_Dispatcher_Interface</classname>
  138. se usa para definir dispatchers. Dispatching (Despachar) es el proceso
  139. de sacar el controlador y la acción del objeto que solicita y
  140. mapearlo a un controlador archivo (o clase) y al método acción
  141. en la clase del controlador. Si el controlador o acción no
  142. existen, hará un manejo para determinar los controladores
  143. por defecto y las acciones a enviar.
  144. </para>
  145. <para>
  146. El proceso actual de dispatching(despacho) consta de instanciar la
  147. clase del controlador y llamar al método acción en esa
  148. clase. A diferencia del routing, que ocurre sólo una vez,
  149. el dispatching(despacho) ocurre en un bucle. Si el estado del objeto que
  150. que envía la solicita es reseteado en cualquier punto,
  151. el bucle se repetirá, llamando a cualquier acción que esté
  152. actualmente establecida en la solicitud del objeto.
  153. La primera vez el bucle termina con la solicitud del objeto,
  154. el estado de lo enviado se establece a (
  155. <type>Boolean</type>
  156. <constant>TRUE</constant>
  157. ),
  158. que terminará el procesamiento.
  159. </para>
  160. <para>
  161. El dispatcher por defecto es
  162. <classname>Zend_Controller_Dispatcher_Standard</classname>
  163. .
  164. Se definen como controladores MixedCasedClasses cuando
  165. terminan en la palabra Controller, y los métodos de acción
  166. como camelCasedMethods cuando terminan en la palabra Action:
  167. <methodname>FooController::barAction()</methodname>
  168. . En este caso,
  169. el controlador será referido como
  170. <emphasis>foo</emphasis>
  171. y a la
  172. acción como
  173. <emphasis>bar</emphasis>
  174. .
  175. </para>
  176. <note>
  177. <title>Convenciones para Case Naming (Casos de Nombre)</title>
  178. <para>
  179. Dado que los humanos somos notablemente inconsistentes
  180. en mantener cierta sensibilidad respecto a las
  181. minúsculas y mayúsculas al escribir enlaces,
  182. Zend Framework realmente normaliza la información de la
  183. ruta a minúsculas. Esto, por supuesto, afectará cómo
  184. nombre a su controlador y a sus acciones... o referirse
  185. a ellos en los enlaces.
  186. </para>
  187. <para>
  188. Si desea que su clase controlador o el nombre del
  189. método de la acción tenga múltiples MixedCasedWords o
  190. camelCasedWords, para separar las palabras en la
  191. <acronym>URL</acronym>
  192. necesitará hacerlo con un '-' o '.' (aunque puede
  193. configurar el carácter utilizado).
  194. </para>
  195. <para>
  196. Como ejemplo, si se va a la acción en
  197. <methodname>FooBarController::bazBatAction()</methodname>
  198. ,
  199. se referirá a ella en la
  200. <acronym>URL</acronym>
  201. como
  202. <filename>/foo-bar/baz-bat</filename>
  203. o
  204. <filename>/foo.bar/baz.bat</filename>
  205. .
  206. </para>
  207. </note>
  208. </listitem>
  209. <listitem>
  210. <para>
  211. <classname>Zend_Controller_Action</classname>
  212. es el componente base del controlador de acción.
  213. Cada controlador es una sola clase que extiende la
  214. <classname>clase Zend_Controller_Action </classname>
  215. y debe contener uno o más métodos de acción.
  216. </para>
  217. </listitem>
  218. <listitem>
  219. <para>
  220. <classname>Zend_Controller_Response_Abstract</classname>
  221. define una clase base de respuesta utilizada para recoger y
  222. retornar respuestas de los controladores de acción.
  223. Recoge tanto a las cabeceras como al contenido del cuerpo.
  224. </para>
  225. <para>
  226. La clase de respuesta (response) por defecto es
  227. <classname>Zend_Controller_Response_Http</classname>
  228. ,
  229. la cual es adecuada para usarla en un entorno
  230. <acronym>HTTP</acronym>
  231. .
  232. </para>
  233. </listitem>
  234. </itemizedlist>
  235. <para>
  236. El flujo de procesos de
  237. <classname>Zend_Controller</classname>
  238. es relativamente
  239. sencillo. Una solicitud es recibida por
  240. <classname>Zend_Controller_Front</classname>
  241. , la que a su vez llama a
  242. <classname>Zend_Controller_Router_Rewrite</classname>
  243. para determinar qué controlador (y la acción en ese controlador)
  244. despachar.
  245. <classname>Zend_Controller_Router_Rewrite</classname>
  246. descompone la
  247. <acronym>URI</acronym>
  248. a fin de establecer el controlador y el nombre de
  249. acción en la solicitud.
  250. <classname>Zend_Controller_Front</classname>
  251. entonces entra al bucle del dispatch. Llama a
  252. <classname>Zend_Controller_Dispatcher_Standard</classname>
  253. ,
  254. el que pasa la solicitud para enviar al controlador y a la acción
  255. especificada en la
  256. solicitud (o el usado por defecto).
  257. Después de que el controlador ha terminado, el control
  258. vuelve a
  259. <classname>Zend_Controller_Front</classname>
  260. .
  261. Si el controlador ha indicado que debe enviarse otro controlador
  262. mediante el reinicio del
  263. estado de la condición de la solicitud,
  264. el bucle continúa y se ejecuta otro envio.
  265. En caso
  266. contrario el proceso termina.
  267. </para>
  268. </sect1>
  269. <!--
  270. vim:se ts=4 sw=4 et:
  271. -->