1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- EN-Revision: 20765 -->
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>
10 <classname>Zend_Controller</classname>
11 es el corazón del sistema de
12 <acronym>MVC</acronym>
14 <acronym>MVC</acronym>
16 <acronym>MVC</acronym>
18 <ulink url="http://en.wikipedia.org/wiki/Model-view-controller">
19 Modelo-Vista-Controlador
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>
26 <ulink url="http://www.martinfowler.com/eaaCatalog/frontController.html">
27 Front Controller (Controlador Frontal)
29 en el cual todas las transacciones
30 <acronym>HTTP</acronym>
32 interceptadas por el controlador frontal y enviado a una
34 de un Controlador según la
35 <acronym>URL</acronym>
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.
53 <sect2 id="zend.controller.quickstart.go">
54 <title>Quick Start</title>
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.
63 <sect3 id="zend.controller.quickstart.go.directory">
64 <title>Cree su estructura de archivos</title>
67 El primer paso es crear su estructura de archivos. La
68 estructura típica es la
72 <programlisting language="php"><![CDATA[
90 <sect3 id="zend.controller.quickstart.go.docroot">
91 <title>Establezca el document root</title>
94 Apunte su document root en su servidor web hacia el
96 <filename>html/</filename>
97 de la estructura de archivos de arriba.
101 <sect3 id="zend.controller.quickstart.go.rewrite">
102 <title>Cree sus reglas de reescritura</title>
106 <filename>html/.htaccess</filename>
107 que aparece arriba de la siguiente forma:
110 <programlisting language="php"><![CDATA[
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]
120 <title>Learn about mod_rewrite</title>
123 The above rewrite rules allow access to any file under your
125 document root. If there are files you do not
126 want exposed in this way, you may
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>
137 <acronym>IIS</acronym>
138 7.0, use the following as your rewrite
142 <programlisting language="xml"><![CDATA[
143 <?xml version="1.0" encoding="UTF-8"?>
148 <rule name="Imported Rule 1" stopProcessing="true">
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" />
158 <action type="None" />
160 <rule name="Imported Rule 2" stopProcessing="true">
162 <action type="Rewrite" url="index.php" />
171 La regla de arriba redirigirá las peticiones a recuros existentes
173 simbólicos existentes, archivos no vacíos, o directorios no vacíos)
174 en consecuencia, y todas las otras peticiones al front controller.
179 Las reglas de arriba pertenecen a Apache. Para ejemplos de reglas
181 otros servidores web, mire la
182 <link linkend="zend.controller.router.introduction">
183 documentación de router
190 <sect3 id="zend.controller.quickstart.go.bootstrap">
191 <title>Crear el archivo bootstrap</title>
194 El archivo bootstrap es la página a la que todas las peticiones
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:
203 <programlisting language="php"><![CDATA[
204 Zend_Controller_Front::run('/path/to/app/controllers');
208 Esto instanciará y hará un dispatch del front controller, que
210 peticiones a los action controllers.
214 <sect3 id="zend.controller.quickstart.go.controller">
215 <title>Crear el action controller por defecto</title>
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>
224 a un controlador, y el segundo a una acción. Por ejemplo,
226 <acronym>URL</acronym>
228 http://framework.zend.com/roadmap/components
231 <filename>/roadmap/components</filename>
232 , que apuntará al controlador
233 <emphasis>roadmap</emphasis>
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>
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>
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>
269 <emphasis>componentsAction</emphasis>
270 , y el método final llamado es
271 <methodname>RoadmapController::componentsAction()</methodname>
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>
282 <filename>application/controllers/IndexController.php</filename>
283 , e introduzca lo siguiente:
286 <programlisting language="php"><![CDATA[
287 /** Zend_Controller_Action */
288 class IndexController extends Zend_Controller_Action
290 public function indexAction()
297 Por defecto, el action helper
298 <link linkend="zend.controller.actionhelpers.viewrenderer">
301 está activado. Esto significa que simplemente
302 definiendo un action method y un view
303 script correspondiente,
304 tendrá su contenido generado inmediatamente.
306 <classname>Zend_View</classname>
307 es usado como la capa Vista en el patrón
308 <acronym>MVC</acronym>
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
318 <filename>.phtml</filename>
319 , lo que significa que en el ejemplo de arriba, la
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>
332 De esta forma, la plantilla generada será encontrada en
333 <filename>application/views/scripts/index/index.phtml</filename>
338 <sect3 id="zend.controller.quickstart.go.view">
339 <title>Cree su view script</title>
342 Como hemos mencionado
343 <link linkend="zend.controller.quickstart.go.controller">
344 en la sección anterior
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
350 <filename>application/views/scripts/index/index.phtml</filename>
351 . Cree este archivo, y escriba un poco de HTML:
354 <programlisting language="php"><![CDATA[
356 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
357 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
360 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
361 <title>Mi primera aplicación Zend Framework</title>
364 <h1>>¡Hola, Mundo!</h1>
370 <sect3 id="zend.controller.quickstart.go.errorhandler">
371 <title>Cree su controlador de errores</title>
374 Por defecto, está registrado
375 <link linkend="zend.controller.plugins.standard.errorhandler">
376 el plugin 'error handler'
378 . Este plugin espera que exista
379 un controlador para manejar los errores.
382 <emphasis>ErrorController</emphasis>
383 en el módulo default con un método
384 <methodname>errorAction()</methodname>
388 <programlisting language="php"><![CDATA[
389 class ErrorController extends Zend_Controller_Action
391 public function errorAction()
398 Asumiendo el sistema de carpetas discutido anteriormente,
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:
406 <programlisting language="php"><![CDATA[
408 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
409 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
412 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
416 <h1>Ocurrió un error</h1>
417 <p>Ocurrió un error; Por favor, inténtelo de nuevo más tarde.</p>
423 <sect3 id="zend.controller.quickstart.go.finish">
424 <title>¡Vea el sitio!</title>
427 Con su primer controlador y vista, ya puede arrancar su navegador y acceder a su
430 <filename>example.com</filename>
431 es su dominio, cualquiera de las siguientes
432 <acronym>URL</acronym>
434 la página que acaba de crear:
440 <filename>http://example.com/</filename>
445 <filename>http://example.com/index</filename>
450 <filename>http://example.com/index/index</filename>
456 Ya está listo para empezar a crear más métodos de controladores y acciones.