[ZF-10089] Zend_Log
[zend.git] / documentation / manual / es / module_specs / Zend_Controller-Basics.xml
blob832ed7df57c17828b01baf8331badb60c74e443b
1 <?xml version="1.0" encoding="UTF-8"?>
2     <!-- EN-Revision: 20765 -->
3     <!-- Reviewed: no -->
4 <sect1 id="zend.controller.basics">
5     <title>Conceptos Básicos de Zend_Controller</title>
7     <para>
8         El sistema
9         <classname>Zend_Controller</classname>
10         está diseñado para
11         ser liviano, modular y extensible. Se trata de un diseño minimalista
12         para
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.
19     </para>
21     <para>
22         El siguiente diagrama muestra el flujo de trabajo, y la narrativa
23         que le sigue describe en
24         detalle las interacciones:
25    </para>
27     <para>
28         <inlinegraphic width="483" scale="100" align="center" valign="middle"
29             fileref="figures/zend.controller.basics.png" format="PNG"/>
30     </para>
32     <para>
33         El flujo de procesos de
34         <classname>Zend_Controller</classname>
35         está implementado
36         por varios componentes. Si bien no es necesario entender los cimientos
37         de
38         todos estos componentes para utilizar el sistema, tener un
39         conocimiento práctico del proceso
40         es de mucha utilidad.
41     </para>
43     <itemizedlist>
44         <listitem>
45             <para>
46                 <classname>Zend_Controller_Front</classname>
47                 organiza todo
48                 el flujo de trabajo del sistema
49                 <classname>Zend_Controller</classname>
50                 .
51                 Es una interpretación del patrón FrontController.
52                 <classname>Zend_Controller_Front</classname>
53                 procesa todas
54                 las solicitudes recibidas por el servidor y es responsable
55                 en última instancia de la delegación de las solicitudes a los
56                 ActionControllers
57                 (
58                 <classname>Zend_Controller_Action</classname>
59                 ).
60             </para>
61         </listitem>
63         <listitem>
64             <para>
65                 <classname>Zend_Controller_Request_Abstract</classname>
66                 (a
67                 menudo denominado
68                 <emphasis>Request Object</emphasis>
69                 ) representa
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
74                 por
75                 <classname>Zend_Controller_Dispatcher</classname>
76                 .
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.
82             </para>
84             <para>
85                 Por defecto, se usa
86                 <classname>Zend_Controller_Request_Http</classname>
87                 , el cual
88                 proporciona acceso a todo el ámbito de la petición
89                 <acronym>HTTP</acronym>
90                 .
91             </para>
92         </listitem>
94         <listitem>
95             <para>
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>
104                 .
105                 El ruteo (routing) ocurre sólo una vez: cuando la solicitud
106                 se recibe inicialmente y antes de enviar el primer
107                 controlador.
108             </para>
110             <para>
111                 El router por defecto,
112                 <classname>Zend_Controller_Router_Rewrite</classname>
113                 ,
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.
120                 Como ejemplo, la
121                 <acronym>URL</acronym>
122                 <filename>http://localhost/foo/bar/key/value</filename>
123                 se
124                 decodificará para usar el controlador
125                 <emphasis>foo</emphasis>
126                 ,
127                 la acción
128                 <emphasis>bar</emphasis>
129                 y especificar un parámetro
130                 <emphasis>key</emphasis>
131                 con el valor de
132                 <emphasis>value</emphasis>
133                 .
134             </para>
136             <para>
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
141                     del router</link>
142                 .
143             </para>
144         </listitem>
146         <listitem>
147             <para>
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.
155             </para>
157             <para>
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 (
167                 <type>Boolean</type>
168                 <constant>TRUE</constant>
169                 ),
170                 que terminará el procesamiento.
171             </para>
173             <para>
174                 El dispatcher por defecto es
175                 <classname>Zend_Controller_Dispatcher_Standard</classname>
176                 .
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>
181                 . En este caso,
182                 el controlador será referido como
183                 <emphasis>foo</emphasis>
184                 y a la
185                 acción como
186                 <emphasis>bar</emphasis>
187                 .
188             </para>
190             <note>
191                 <title>Convenciones para Case Naming (Casos de Nombre)</title>
193                 <para>
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.
201                    </para>
203                 <para>
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).
210                 </para>
212                 <para>
213                     Como ejemplo, si se va a la acción en
214                     <methodname>FooBarController::bazBatAction()</methodname>
215                     ,
216                     se referirá a ella en la
217                     <acronym>URL</acronym>
218                     como
219                     <filename>/foo-bar/baz-bat</filename>
220                     o
221                     <filename>/foo.bar/baz.bat</filename>
222                     .
223                 </para>
224             </note>
225         </listitem>
227         <listitem>
228             <para>
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.
234             </para>
235         </listitem>
237         <listitem>
238             <para>
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.
243             </para>
245             <para>
246                 La clase de respuesta (response) por defecto es
247                 <classname>Zend_Controller_Response_Http</classname>
248                 ,
249                 la cual es adecuada para usarla en un entorno
250                 <acronym>HTTP</acronym>
251                 .
252             </para>
253         </listitem>
254     </itemizedlist>
256     <para>
257         El flujo de procesos de
258         <classname>Zend_Controller</classname>
259         es relativamente
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)
265         despachar.
266         <classname>Zend_Controller_Router_Rewrite</classname>
267         descompone la
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>
274         ,
275         el que pasa la solicitud para enviar al controlador y a la acción
276         especificada en la
277         solicitud (o el usado por defecto).
278         Después de que el controlador ha terminado, el control
279         vuelve a
280         <classname>Zend_Controller_Front</classname>
281         .
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.
286         En caso
287         contrario el proceso termina.
288     </para>
289 </sect1>
291     <!--
292 vim:se ts=4 sw=4 et: