1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- EN-Revision: 20765 -->
4 <sect1 id="zend.controller.basics">
5 <title>Conceptos Básicos de Zend_Controller</title>
9 <classname>Zend_Controller</classname>
11 ser liviano, modular y extensible. Se trata de un diseño minimalista
13 permitir flexibilidad y cierta libertad para los usuarios
14 proporcionando al mismo tiempo una
15 estructura suficiente para que sistemas
16 construidos alrededor de
17 <classname>Zend_Controller</classname>
18 compartan algunas convenciones y layouts de código similares.
22 El siguiente diagrama muestra el flujo de trabajo, y la narrativa
23 que le sigue describe en
24 detalle las interacciones:
28 <inlinegraphic width="483" scale="100" align="center" valign="middle"
29 fileref="figures/zend.controller.basics.png" format="PNG"/>
33 El flujo de procesos de
34 <classname>Zend_Controller</classname>
36 por varios componentes. Si bien no es necesario entender los cimientos
38 todos estos componentes para utilizar el sistema, tener un
39 conocimiento práctico del proceso
46 <classname>Zend_Controller_Front</classname>
48 el flujo de trabajo del sistema
49 <classname>Zend_Controller</classname>
51 Es una interpretación del patrón FrontController.
52 <classname>Zend_Controller_Front</classname>
54 las solicitudes recibidas por el servidor y es responsable
55 en última instancia de la delegación de las solicitudes a los
58 <classname>Zend_Controller_Action</classname>
65 <classname>Zend_Controller_Request_Abstract</classname>
68 <emphasis>Request Object</emphasis>
70 el entorno de la solicitud y ofrece métodos para
71 establecer y recuperar el controlador, los nombres de las
72 acciones y cualquier parámetro de solicitud. Además realiza un seguimiento
73 de si la acción que contiene ha sido enviada o no
75 <classname>Zend_Controller_Dispatcher</classname>
77 Se pueden usar extensiones del objeto abstracto para
78 encapsular toda el entorno de la solicitud,
79 permitiendo a los routers traer información del ámbito
80 de la solicitud a fin de establecer el controlador
81 y los nombres de acción.
86 <classname>Zend_Controller_Request_Http</classname>
88 proporciona acceso a todo el ámbito de la petición
89 <acronym>HTTP</acronym>
96 <classname>Zend_Controller_Router_Interface</classname>
97 se usa para definir routers. El ruteo es el proceso de
98 examinar el ámbito de la solicitud para determinar
99 qué controlador, y qué acción del controlador debe recibir
100 la solicitud. Este controlador, la acción, y los parámetros
101 opcionales son luego establecidos en el objeto de la solicitud
102 para ser procesados por
103 <classname>Zend_Controller_Dispatcher_Standard</classname>
105 El ruteo (routing) ocurre sólo una vez: cuando la solicitud
106 se recibe inicialmente y antes de enviar el primer
111 El router por defecto,
112 <classname>Zend_Controller_Router_Rewrite</classname>
114 toma el punto final de una
115 <acronym>URI</acronym>
116 como se especificó en
117 <classname>Zend_Controller_Request_Http</classname>
118 y la descompone en un controlador, una acción y parámetros,
119 basándose en la información de la ruta del url.
121 <acronym>URL</acronym>
122 <filename>http://localhost/foo/bar/key/value</filename>
124 decodificará para usar el controlador
125 <emphasis>foo</emphasis>
128 <emphasis>bar</emphasis>
129 y especificar un parámetro
130 <emphasis>key</emphasis>
132 <emphasis>value</emphasis>
137 <classname>Zend_Controller_Router_Rewrite</classname>
138 también puede ser utilizado para igualar las rutas arbitrarios;
139 para más información, ver
140 <link linkend="zend.controller.router">documentación
148 <classname>Zend_Controller_Dispatcher_Interface</classname>
149 se usa para definir dispatchers. Dispatching (Despachar) es el proceso
150 de sacar el controlador y la acción del objeto que solicita y
151 mapearlo a un controlador archivo (o clase) y al método acción
152 en la clase del controlador. Si el controlador o acción no
153 existen, hará un manejo para determinar los controladores
154 por defecto y las acciones a enviar.
158 El proceso actual de dispatching(despacho) consta de instanciar la
159 clase del controlador y llamar al método acción en esa
160 clase. A diferencia del routing, que ocurre sólo una vez,
161 el dispatching(despacho) ocurre en un bucle. Si el estado del objeto que
162 que envía la solicita es reseteado en cualquier punto,
163 el bucle se repetirá, llamando a cualquier acción que esté
164 actualmente establecida en la solicitud del objeto.
165 La primera vez el bucle termina con la solicitud del objeto,
166 el estado de lo enviado se establece a (
168 <constant>TRUE</constant>
170 que terminará el procesamiento.
174 El dispatcher por defecto es
175 <classname>Zend_Controller_Dispatcher_Standard</classname>
177 Se definen como controladores MixedCasedClasses cuando
178 terminan en la palabra Controller, y los métodos de acción
179 como camelCasedMethods cuando terminan en la palabra Action:
180 <methodname>FooController::barAction()</methodname>
182 el controlador será referido como
183 <emphasis>foo</emphasis>
186 <emphasis>bar</emphasis>
191 <title>Convenciones para Case Naming (Casos de Nombre)</title>
194 Dado que los humanos somos notablemente inconsistentes
195 en mantener cierta sensibilidad respecto a las
196 minúsculas y mayúsculas al escribir enlaces,
197 Zend Framework realmente normaliza la información de la
198 ruta a minúsculas. Esto, por supuesto, afectará cómo
199 nombre a su controlador y a sus acciones... o referirse
200 a ellos en los enlaces.
204 Si desea que su clase controlador o el nombre del
205 método de la acción tenga múltiples MixedCasedWords o
206 camelCasedWords, para separar las palabras en la
207 <acronym>URL</acronym>
208 necesitará hacerlo con un '-' o '.' (aunque puede
209 configurar el carácter utilizado).
213 Como ejemplo, si se va a la acción en
214 <methodname>FooBarController::bazBatAction()</methodname>
216 se referirá a ella en la
217 <acronym>URL</acronym>
219 <filename>/foo-bar/baz-bat</filename>
221 <filename>/foo.bar/baz.bat</filename>
229 <classname>Zend_Controller_Action</classname>
230 es el componente base del controlador de acción.
231 Cada controlador es una sola clase que extiende la
232 <classname>clase Zend_Controller_Action </classname>
233 y debe contener uno o más métodos de acción.
239 <classname>Zend_Controller_Response_Abstract</classname>
240 define una clase base de respuesta utilizada para recoger y
241 retornar respuestas de los controladores de acción.
242 Recoge tanto a las cabeceras como al contenido del cuerpo.
246 La clase de respuesta (response) por defecto es
247 <classname>Zend_Controller_Response_Http</classname>
249 la cual es adecuada para usarla en un entorno
250 <acronym>HTTP</acronym>
257 El flujo de procesos de
258 <classname>Zend_Controller</classname>
260 sencillo. Una solicitud es recibida por
261 <classname>Zend_Controller_Front</classname>
262 , la que a su vez llama a
263 <classname>Zend_Controller_Router_Rewrite</classname>
264 para determinar qué controlador (y la acción en ese controlador)
266 <classname>Zend_Controller_Router_Rewrite</classname>
268 <acronym>URI</acronym>
269 a fin de establecer el controlador y el nombre de
270 acción en la solicitud.
271 <classname>Zend_Controller_Front</classname>
272 entonces entra al bucle del dispatch. Llama a
273 <classname>Zend_Controller_Dispatcher_Standard</classname>
275 el que pasa la solicitud para enviar al controlador y a la acción
277 solicitud (o el usado por defecto).
278 Después de que el controlador ha terminado, el control
280 <classname>Zend_Controller_Front</classname>
282 Si el controlador ha indicado que debe enviarse otro controlador
283 mediante el reinicio del
284 estado de la condición de la solicitud,
285 el bucle continúa y se ejecuta otro envio.
287 contrario el proceso termina.