# Inicio rápido a Zend_Controller

## Introducción

`Zend_Controller` es el corazón del sistema de MVC de Zend Framework MVC . MVC son las siglas de Modelo-Vista-Controlador y es un patrón de diseño con el objetivo de separar la lógica de la aplicación de la lógica de visualización. `Zend_Controller_Front` implementa el patrón Front Controller (Controlador Frontal) en el cual todas las transacciones HTTP (requests) son interceptadas por el controlador frontal y enviado a una Acción particular de un Controlador según la URL pedida.

El sistema `Zend_Controller` fue construido con la extensibilidad en mente, ya sea heredando las clases existentes, escribiendo nuevas clases que implementan varias interfaces o clases abstractas que forman la base de la familia de clases del controlador, o escribiendo plugins o helpers de las acciones para aumentar o manipular la funcionalidad del sistema.

## Quick Start

Si necesita información más detallada, mire las secciones siguientes. Si solamente quiere inicializar y ejecutar una aplicación rápidamente, siga leyendo.

### Cree su estructura de archivos

El primer paso es crear su estructura de archivos. La estructura típica es la siguiente:

    application/
        controllers/
            IndexController.php
        models/
        views/
            scripts/
                index/
                    index.phtml
            helpers/
            filters/
    html/
        .htaccess
        index.php

### Establezca el document root

Apunte su document root en su servidor web hacia el directorio `html/` de la estructura de archivos de arriba.

### Cree sus reglas de reescritura

Edite el archivo `html/.htaccess` que aparece arriba de la siguiente forma:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^.*$ index.php [NC,L]

#### Learn about mod_rewrite

The above rewrite rules allow access to any file under your virtual host's document root. If there are files you do not want exposed in this way, you may want to be more restrictive in your rules. Go to the Apache website to learn more about mod_rewrite .

If using IIS 7.0, use the following as your rewrite configuration:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
         <system.webServer>
             <rewrite>
                 <rules>
                     <rule name="Imported Rule 1" stopProcessing="true">
                         <match url="^.*$" />
                         <conditions logicalGrouping="MatchAny">
                             <add input="{REQUEST_FILENAME}"
                                 matchType="IsFile" pattern=""
                                 ignoreCase="false" />
                             <add input="{REQUEST_FILENAME}"
                                 matchType="IsDirectory"
                                 pattern="" ignoreCase="false" />
                         </conditions>
                         <action type="None" />
                     </rule>
                     <rule name="Imported Rule 2" stopProcessing="true">
                         <match url="^.*$" />
                         <action type="Rewrite" url="index.php" />
                     </rule>
                 </rules>
             </rewrite>
         </system.webServer>
    </configuration>

La regla de arriba redirigirá las peticiones a recuros existentes (enlaces simbólicos existentes, archivos no vacíos, o directorios no vacíos) en consecuencia, y todas las otras peticiones al front controller.

Las reglas de arriba pertenecen a Apache. Para ejemplos de reglas de rewrite para otros servidores web, mire la documentación de router .

### Crear el archivo bootstrap

El archivo bootstrap es la página a la que todas las peticiones son redirigidas a través de -- `html/index.php` en este caso. Abra el archivo `html/index.php` en el editor de su elección y añada lo siguiente:

    Zend_Controller_Front::run('/path/to/app/controllers');

Esto instanciará y hará un dispatch del front controller, que redigirá las peticiones a los action controllers.

### Crear el action controller por defecto

Antes de tratar los action controllers, debe primero entender cómo las peticiones son redirigidas en Zend Framework. Por defecto, el primero segmento de una ruta URL apunta a un controlador, y el segundo a una acción. Por ejemplo, dada la URL `http://framework.zend.com/roadmap/components` , la ruta es `/roadmap/components` , que apuntará al controlador roadmap y la acción components . Si no se suministra una acción, se asume la acción index , y si no se suministra un controlador, se asume el controlador index (siguiendo la convención de Apache de apuntar a DirectoryIndex automáticamente).

El dispatcher de `Zend_Controller` toma entonces el valor del controlador y lo apunta a una clase. Por defecto, pone en mayúsculas la primera letra del nombre de controlador y agrega la palabra Controller . De esta forma, en nuestro ejemplo de arriba, el controlador roadmap es dirigido a la clase `RoadmapController` .

De la misma forma, el valor de action es dirigido a un método de la clase controladora. Por defecto, el valor se pasa a minúsculas, y la palabra Action es añadida. De esta forma, en nuestro ejemplo de arriba, la acción components se convierte en componentsAction , y el método final llamado es `RoadmapController::componentsAction()` .

Continuando, creemos ahora un action controller y un método de acción por defecto. Como se ha dicho antes, el controlador por defecto y la acción llamada son ambos index . Abra el archivo `application/controllers/IndexController.php` , e introduzca lo siguiente:

    /** Zend_Controller_Action */
    class IndexController extends Zend_Controller_Action
    {
        public function indexAction()
        {
        }
    }

Por defecto, el action helper ViewRenderer está activado. Esto significa que simplemente definiendo un action method y un view script correspondiente, tendrá su contenido generado inmediatamente. Por defecto, `Zend_View` es usado como la capa Vista en el patrón MVC . El ViewRenderer hace algo de magia, y usa el nombre de controlador (e.g., index ) y el nombre de acción actual (e.g., index ) para determinar qué plantilla traer. Por defecto, las plantillas terminan con la extensión `.phtml` , lo que significa que en el ejemplo de arriba, la plantilla `index/index.phtml` será generada. Adicionalmente, el ViewRenderer asume automáticamente que la carpeta views al mismo nivel que la carpeta controller será la carpeta raíz de la vista, y que el script de vista actual estará en la subcarpeta `views/scripts/` . De esta forma, la plantilla generada será encontrada en `application/views/scripts/index/index.phtml` .

### Cree su view script

Como hemos mencionado en la sección anterior , los scripts de vista se encuentran en `application/views/scripts/` ; el view script para el controlador y la acción por defecto está en `application/views/scripts/index/index.phtml` . Cree este archivo, y escriba un poco de HTML:

    <!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <title>Mi primera aplicación Zend Framework</title>
    </head>
    <body>
        <h1>>¡Hola, Mundo!</h1>
    </body>
    </html>

### Cree su controlador de errores

Por defecto, está registrado el plugin 'error handler' . Este plugin espera que exista un controlador para manejar los errores. Por defecto, asume un ErrorController en el módulo default con un método `errorAction()` :

    class ErrorController extends Zend_Controller_Action
    {
        public function errorAction()
        {
        }
    }

Asumiendo el sistema de carpetas discutido anteriormente, este archivo irá en `application/controllers/ErrorController.php` . También necesitará crear un view script en `application/views/scripts/error/error.phtml` ; el contenido de ejemplo será parecido a:

    <!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <title>Error</title>
    </head>
    <body>
        <h1>Ocurrió un error</h1>
        <p>Ocurrió un error; Por favor, inténtelo de nuevo más tarde.</p>
    </body>
    </html>

### ¡Vea el sitio!

Con su primer controlador y vista, ya puede arrancar su navegador y acceder a su sitio. Asumiendo que `example.com` es su dominio, cualquiera de las siguientes URL s le llevará a la página que acaba de crear:

- `http://example.com/`

- `http://example.com/index`

- `http://example.com/index/index`

Ya está listo para empezar a crear más métodos de controladores y acciones. ¡Felicidades!