[ZF-10089] Zend_Log
[zend.git] / documentation / manual / es / module_specs / Zend_Controller-QuickStart.xml
blobe07f629dfbe437538b420179de744841b2d679da
1 <?xml version="1.0" encoding="UTF-8"?>
2     <!-- EN-Revision: 20765 -->
3     <!-- Reviewed: no -->
4 <sect1 id="zend.controller.quickstart">
5     <title>Inicio rápido a Zend_Controller</title>
7     <sect2 id="zend.controller.quickstart.introduction">
8         <title>Introducción</title>
9         <para>
10             <classname>Zend_Controller</classname>
11             es el corazón del sistema de
12             <acronym>MVC</acronym>
13             de Zend Framework
14             <acronym>MVC</acronym>
15             .
16             <acronym>MVC</acronym>
17             son las siglas de
18             <ulink url="http://en.wikipedia.org/wiki/Model-view-controller">
19                 Modelo-Vista-Controlador
20             </ulink>
21             y es un patrón de diseño con el objetivo de separar la
22             lógica de la aplicación de la
23             lógica de visualización.
24             <classname>Zend_Controller_Front</classname>
25             implementa el patrón
26             <ulink url="http://www.martinfowler.com/eaaCatalog/frontController.html">
27                 Front Controller (Controlador Frontal)
28             </ulink>
29             en el cual todas las transacciones
30             <acronym>HTTP</acronym>
31             (requests) son
32             interceptadas por el controlador frontal y enviado a una
33             Acción particular
34             de un Controlador según la
35             <acronym>URL</acronym>
36             pedida.
38         </para>
39         <para>
40             El sistema
41             <classname>Zend_Controller</classname>
42             fue construido con la extensibilidad en mente, ya sea
43             heredando las clases existentes,
44             escribiendo nuevas clases
45             que implementan varias interfaces o clases abstractas que
46             forman la base de la familia de clases del controlador, o
47             escribiendo plugins o helpers
48             de las acciones para aumentar
49             o manipular la funcionalidad del sistema.
50         </para>
51     </sect2>
53     <sect2 id="zend.controller.quickstart.go">
54         <title>Quick Start</title>
56         <para>
57             Si necesita información más detallada, mire las secciones
58             siguientes. Si solamente
59             quiere inicializar y ejecutar una
60             aplicación rápidamente, siga leyendo.
61        </para>
63         <sect3 id="zend.controller.quickstart.go.directory">
64             <title>Cree su estructura de archivos</title>
66             <para>
67                 El primer paso es crear su estructura de archivos. La
68                 estructura típica es la
69                 siguiente:
70            </para>
72             <programlisting language="php"><![CDATA[
73 application/
74     controllers/
75         IndexController.php
76     models/
77     views/
78         scripts/
79             index/
80                 index.phtml
81         helpers/
82         filters/
83 html/
84     .htaccess
85     index.php
86 ]]></programlisting>
88         </sect3>
90         <sect3 id="zend.controller.quickstart.go.docroot">
91             <title>Establezca el document root</title>
93             <para>
94                 Apunte su document root en su servidor web hacia el
95                 directorio
96                 <filename>html/</filename>
97                 de la estructura de archivos de arriba.
98             </para>
99         </sect3>
101         <sect3 id="zend.controller.quickstart.go.rewrite">
102             <title>Cree sus reglas de reescritura</title>
104             <para>
105                 Edite el archivo
106                 <filename>html/.htaccess</filename>
107                 que aparece arriba de la siguiente forma:
108             </para>
110             <programlisting language="php"><![CDATA[
111 RewriteEngine On
112 RewriteCond %{REQUEST_FILENAME} -s [OR]
113 RewriteCond %{REQUEST_FILENAME} -l [OR]
114 RewriteCond %{REQUEST_FILENAME} -d
115 RewriteRule ^.*$ - [NC,L]
116 RewriteRule ^.*$ index.php [NC,L]
117 ]]></programlisting>
119             <note>
120                 <title>Learn about mod_rewrite</title>
122                 <para>
123                     The above rewrite rules allow access to any file under your
124                     virtual host's
125                     document root. If there are files you do not
126                     want exposed in this way, you may
127                     want to be more
128                     restrictive in your rules. Go to the Apache website to
129                     <ulink url="http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html">learn
130                         more about mod_rewrite</ulink>
131                     .
132                 </para>
133             </note>
135             <para>
136                 If using
137                 <acronym>IIS</acronym>
138                 7.0, use the following as your rewrite
139                 configuration:
140             </para>
142             <programlisting language="xml"><![CDATA[
143 <?xml version="1.0" encoding="UTF-8"?>
144 <configuration>
145      <system.webServer>
146          <rewrite>
147              <rules>
148                  <rule name="Imported Rule 1" stopProcessing="true">
149                      <match url="^.*$" />
150                      <conditions logicalGrouping="MatchAny">
151                          <add input="{REQUEST_FILENAME}"
152                              matchType="IsFile" pattern=""
153                              ignoreCase="false" />
154                          <add input="{REQUEST_FILENAME}"
155                              matchType="IsDirectory"
156                              pattern="" ignoreCase="false" />
157                      </conditions>
158                      <action type="None" />
159                  </rule>
160                  <rule name="Imported Rule 2" stopProcessing="true">
161                      <match url="^.*$" />
162                      <action type="Rewrite" url="index.php" />
163                  </rule>
164              </rules>
165          </rewrite>
166      </system.webServer>
167 </configuration>
168 ]]></programlisting>
170             <para>
171                 La regla de arriba redirigirá las peticiones a recuros existentes
172                 (enlaces
173                 simbólicos existentes, archivos no vacíos, o directorios no vacíos)
174                 en consecuencia, y todas las otras peticiones al front controller.
175            </para>
177             <note>
178                 <para>
179                     Las reglas de arriba pertenecen a Apache. Para ejemplos de reglas
180                     de rewrite para
181                     otros servidores web, mire la
182                     <link linkend="zend.controller.router.introduction">
183                         documentación de router
184                     </link>
185                     .
186                 </para>
187             </note>
188         </sect3>
190         <sect3 id="zend.controller.quickstart.go.bootstrap">
191             <title>Crear el archivo bootstrap</title>
193             <para>
194                 El archivo bootstrap es la página a la que todas las peticiones
195                 son redirigidas a
196                 través de --
197                 <filename>html/index.php</filename>
198                 en este caso. Abra el archivo
199                 <filename>html/index.php</filename>
200                 en el editor de su elección y añada lo siguiente:
201             </para>
203             <programlisting language="php"><![CDATA[
204 Zend_Controller_Front::run('/path/to/app/controllers');
205 ]]></programlisting>
207             <para>
208                 Esto instanciará y hará un dispatch del front controller, que
209                 redigirá las
210                 peticiones a los action controllers.
211            </para>
212         </sect3>
214         <sect3 id="zend.controller.quickstart.go.controller">
215             <title>Crear el action controller por defecto</title>
217             <para>
218                 Antes de tratar los action controllers, debe primero
219                 entender cómo las peticiones son
220                 redirigidas en Zend Framework.
221                 Por defecto, el primero segmento de una ruta
222                 <acronym>URL</acronym>
223                 apunta
224                 a un controlador, y el segundo a una acción. Por ejemplo,
225                 dada la
226                 <acronym>URL</acronym>
227                 <filename>
228                     http://framework.zend.com/roadmap/components
229                 </filename>
230                 , la ruta es
231                 <filename>/roadmap/components</filename>
232                 , que apuntará al controlador
233                 <emphasis>roadmap</emphasis>
234                 y la acción
235                 <emphasis>components</emphasis>
236                 . Si no se suministra una acción, se asume la acción
237                 <emphasis>index</emphasis>
238                 , y si no se suministra un controlador, se asume el controlador
239                 <emphasis>index</emphasis>
240                 (siguiendo la convención de Apache de apuntar a
241                 <emphasis>DirectoryIndex</emphasis>
242                 automáticamente).
243             </para>
245             <para>
246                 El dispatcher de
247                 <classname>Zend_Controller</classname>
248                 toma entonces el valor del controlador y lo apunta
249                 a una clase. Por defecto, pone en
250                 mayúsculas la primera letra
251                 del nombre de controlador y agrega la palabra
252                 <emphasis>Controller</emphasis>
253                 . De esta forma, en nuestro ejemplo de arriba, el controlador
254                 <emphasis>roadmap</emphasis>
255                 es dirigido a la clase
256                 <classname>RoadmapController</classname>
257                 .
258             </para>
260             <para>
261                 De la misma forma, el valor de action es dirigido
262                 a un método de la clase
263                 controladora. Por defecto, el valor se
264                 pasa a minúsculas, y la palabra
265                 <emphasis>Action</emphasis>
266                 es añadida. De esta forma, en nuestro ejemplo de arriba, la acción
267                 <emphasis>components</emphasis>
268                 se convierte en
269                 <emphasis>componentsAction</emphasis>
270                 , y el método final llamado es
271                 <methodname>RoadmapController::componentsAction()</methodname>
272                 .
273             </para>
275             <para>
276                 Continuando, creemos ahora un action controller
277                 y un método de acción por defecto.
278                 Como se ha dicho antes,
279                 el controlador por defecto y la acción llamada son ambos
280                 <emphasis>index</emphasis>
281                 . Abra el archivo
282                 <filename>application/controllers/IndexController.php</filename>
283                 , e introduzca lo siguiente:
284             </para>
286             <programlisting language="php"><![CDATA[
287 /** Zend_Controller_Action */
288 class IndexController extends Zend_Controller_Action
290     public function indexAction()
291     {
292     }
294 ]]></programlisting>
296             <para>
297                 Por defecto, el action helper
298                 <link linkend="zend.controller.actionhelpers.viewrenderer">
299                     ViewRenderer
300                 </link>
301                 está activado. Esto significa que simplemente
302                 definiendo un action method y un view
303                 script correspondiente,
304                 tendrá su contenido generado inmediatamente.
305                 Por defecto,
306                 <classname>Zend_View</classname>
307                 es usado como la capa Vista en el patrón
308                 <acronym>MVC</acronym>
309                 . El
310                 <emphasis>ViewRenderer</emphasis>
311                 hace algo de magia, y usa el nombre de controlador (e.g.,
312                 <emphasis>index</emphasis>
313                 ) y el nombre de acción actual (e.g.,
314                 <emphasis>index</emphasis>
315                 ) para determinar qué plantilla traer. Por defecto,
316                 las plantillas terminan con la
317                 extensión
318                 <filename>.phtml</filename>
319                 , lo que significa que en el ejemplo de arriba, la
320                 plantilla
321                 <filename>index/index.phtml</filename>
322                 será generada. Adicionalmente, el
323                 <emphasis>ViewRenderer</emphasis>
324                 asume automáticamente que la carpeta
325                 <emphasis>views</emphasis>
326                 al mismo nivel que la carpeta controller será
327                 la carpeta raíz de la vista, y que el
328                 script de vista actual
329                 estará en la subcarpeta
330                 <filename>views/scripts/</filename>
331                 .
332                 De esta forma, la plantilla generada será encontrada en
333                 <filename>application/views/scripts/index/index.phtml</filename>
334                 .
335             </para>
336         </sect3>
338         <sect3 id="zend.controller.quickstart.go.view">
339             <title>Cree su view script</title>
341             <para>
342                 Como hemos mencionado
343                 <link linkend="zend.controller.quickstart.go.controller">
344                     en la sección anterior
345                 </link>
346                 , los scripts de vista se encuentran en
347                 <filename>application/views/scripts/</filename>
348                 ; el view script para el controlador y la acción por defecto
349                 está en
350                 <filename>application/views/scripts/index/index.phtml</filename>
351                 . Cree este archivo, y escriba un poco de HTML:
352             </para>
354             <programlisting language="php"><![CDATA[
355 <!DOCTYPE html
356 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
357 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
358 <html>
359 <head>
360   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
361   <title>Mi primera aplicación Zend Framework</title>
362 </head>
363 <body>
364     <h1>>¡Hola, Mundo!</h1>
365 </body>
366 </html>
367 ]]></programlisting>
368         </sect3>
370         <sect3 id="zend.controller.quickstart.go.errorhandler">
371             <title>Cree su controlador de errores</title>
373             <para>
374                 Por defecto, está registrado
375                 <link linkend="zend.controller.plugins.standard.errorhandler">
376                     el plugin 'error handler'
377                 </link>
378                 . Este plugin espera que exista
379                 un controlador para manejar los errores.
380                 Por defecto,
381                 asume un
382                 <emphasis>ErrorController</emphasis>
383                 en el módulo default con un método
384                 <methodname>errorAction()</methodname>
385                 :
386             </para>
388             <programlisting language="php"><![CDATA[
389 class ErrorController extends Zend_Controller_Action
391     public function errorAction()
392     {
393     }
395 ]]></programlisting>
397             <para>
398                 Asumiendo el sistema de carpetas discutido anteriormente,
399                 este archivo irá en
400                 <filename>application/controllers/ErrorController.php</filename>
401                 . También necesitará crear un view script en
402                 <filename>application/views/scripts/error/error.phtml</filename>
403                 ; el contenido de ejemplo será parecido a:
404             </para>
406             <programlisting language="php"><![CDATA[
407 <!DOCTYPE html
408 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
409 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
410 <html>
411 <head>
412   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
413   <title>Error</title>
414 </head>
415 <body>
416     <h1>Ocurrió un error</h1>
417     <p>Ocurrió un error; Por favor, inténtelo de nuevo más tarde.</p>
418 </body>
419 </html>
420 ]]></programlisting>
421         </sect3>
423         <sect3 id="zend.controller.quickstart.go.finish">
424             <title>¡Vea el sitio!</title>
426             <para>
427                 Con su primer controlador y vista, ya puede arrancar su navegador y acceder a su
428                 sitio.
429                 Asumiendo que
430                 <filename>example.com</filename>
431                 es su dominio, cualquiera de las siguientes
432                 <acronym>URL</acronym>
433                 s le llevará a
434                 la página que acaba de crear:
435             </para>
437             <itemizedlist>
438                 <listitem>
439                     <para>
440                         <filename>http://example.com/</filename>
441                     </para>
442                 </listitem>
443                 <listitem>
444                     <para>
445                         <filename>http://example.com/index</filename>
446                     </para>
447                 </listitem>
448                 <listitem>
449                     <para>
450                         <filename>http://example.com/index/index</filename>
451                     </para>
452                 </listitem>
453             </itemizedlist>
455             <para>
456                 Ya está listo para empezar a crear más métodos de controladores y acciones.
457                 ¡Felicidades!
458            </para>
459         </sect3>
460     </sect2>
461 </sect1>
462     <!--
463     vim:se ts=4 sw=4 et: