<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 15103 -->
<!-- Reviewed: no -->
<sect1 id="zend.controller.quickstart">
    <title>Inicio rápido a Zend_Controller</title>

    <sect2 id="zend.controller.quickstart.introduction">
        <title>Introducción</title>
        <para>
            <methodname>Zend_Controller</methodname>
            es el corazón del sistema de MVC de Zend Framework MVC. MVC
            son las siglas de
            <ulink url="http://en.wikipedia.org/wiki/Model-view-controller">
                Modelo-Vista-Controlador
            </ulink>
            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.
            <methodname>Zend_Controller_Front</methodname>
            implementa el patrón
            <ulink url="http://www.martinfowler.com/eaaCatalog/frontController.html">
                Front Controller (Controlador Frontal)
            </ulink>
            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.


        </para>
        <para>
            El sistema
            <methodname>Zend_Controller</methodname>
            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.
        </para>
    </sect2>

    <sect2 id="zend.controller.quickstart.go">
        <title>Quick Start</title>

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

        <sect3 id="zend.controller.quickstart.go.directory">
            <title>Cree su estructura de archivos</title>

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

             <programlisting language="php"><![CDATA[
application/
    controllers/
        IndexController.php
    models/
    views/
        scripts/
            index/
                index.phtml
        helpers/
        filters/
html/
    .htaccess
    index.php
]]></programlisting>

        </sect3>

        <sect3 id="zend.controller.quickstart.go.docroot">
            <title>Establezca su document root</title>

            <para>
                Apunte su document root en su servidor web hacia el
                directorio
                <methodname>html</methodname>
                de la estructura de archivos de arriba.
            </para>
        </sect3>

        <sect3 id="zend.controller.quickstart.go.rewrite">
            <title>Cree sus reglas de reescritura</title>

            <para>
                Edite el archivo
                <methodname>html/.htaccess</methodname>
                que aparece arriba de la siguiente forma:
            </para>

             <programlisting language="php"><![CDATA[
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
]]></programlisting>

            <para>
                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.
            </para>

            <note>
                <para>
                    Las reglas de arriba pertenecen a Apache. Para ejemplos de reglas
                    de rewrite para otros servidores web, mire la
                    <link linkend="zend.controller.router.introduction">
                        documentación de router
                    </link>
                    .
                </para>
            </note>
        </sect3>

        <sect3 id="zend.controller.quickstart.go.bootstrap">
            <title>Cree su archivo bootstrap</title>

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

             <programlisting language="php"><![CDATA[
Zend_Controller_Front::run('/path/to/app/controllers');
]]></programlisting>

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

        <sect3 id="zend.controller.quickstart.go.controller">
            <title>Cree su action controller por defecto</title>

            <para>
                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
                <methodname>
                    http://framework.zend.com/roadmap/components
                </methodname>
                , la ruta es
                <methodname>/roadmap/components</methodname>
                , que apuntará al controlador
                <methodname>roadmap</methodname>
                y la acción
                <methodname>components</methodname>
                . Si no se suministra una acción, se asume la acción
                <methodname>index</methodname>
                , y si no se suministra un controlador, se asume el controlador
                <methodname>index</methodname>
                (siguiendo la convención de Apache de apuntar a
                <methodname>DirectoryIndex</methodname>
                automáticamente).
            </para>

            <para>
                El dispatcher de <methodname>Zend_Controller</methodname>
                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
                <methodname>Controller</methodname>
                . De esta forma, en nuestro ejemplo de arriba, el controlador
                <methodname>roadmap</methodname>
                es dirigido a la clase
                <methodname>RoadmapController</methodname>
                .
            </para>

            <para>
                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
                <methodname>Action</methodname>
                es añadida. De esta forma, en nuestro ejemplo de arriba, la acción
                <methodname>components</methodname>
                se convierte en
                <methodname>componentsAction</methodname>
                , y el método final llamado es
                <methodname>RoadmapController::componentsAction()</methodname>
                .
            </para>

            <para>
                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
                <methodname>index</methodname>
                . Abra el archivo
                <methodname>application/controllers/IndexController.php</methodname>
                , e introduzca lo siguiente:
            </para>

             <programlisting language="php"><![CDATA[
/** Zend_Controller_Action */
class IndexController extends Zend_Controller_Action
{
    public function indexAction()
    {
    }
}
]]></programlisting>

            <para>
                Por defecto, el action helper
                <link linkend="zend.controller.actionhelpers.viewrenderer">
                    ViewRenderer
                </link>
                está activado. Esto significa que simplemente
                definiendo un action method y un view script correspondiente,
                tendrá su contenido generado inmediatamente.
                Por defecto,
                <methodname>Zend_View</methodname>
                es usado como la capa Vista en el patrón MVC. El
                <methodname>ViewRenderer</methodname>
                hace algo de magia, y usa el nombre de controlador (e.g.,
                <methodname>index</methodname>
                ) y el nombre de acción actual (e.g.,
                <methodname>index</methodname>
                ) para determinar qué plantilla traer. Por defecto,
                las plantillas terminan con la extensión
                <methodname>.phtml</methodname>
                , lo que significa que en el ejemplo de arriba, la
                plantilla
                <methodname>index/index.phtml</methodname>
                será generada. Adicionalmente, el
                <methodname>ViewRenderer</methodname>
                asume automáticamente que la carpeta
                <methodname>views</methodname>
                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
                <methodname>views/scripts/</methodname>.
                De esta forma, la plantilla generada será encontrada en
                <methodname>application/views/scripts/index/index.phtml</methodname>
                .
            </para>
        </sect3>

        <sect3 id="zend.controller.quickstart.go.view">
            <title>Cree su view script</title>

            <para>
                Como hemos mencionado
                <link linkend="zend.controller.quickstart.go.controller">
                    en la sección anterior
                </link>
                , los scripts de vista se encuentran en
                <methodname>application/views/scripts/</methodname>
                ; el view script para el controlador y la acción por defecto
                está en
                <methodname>application/views/scripts/index/index.phtml</methodname>
                . Cree este archivo, y escriba un poco de HTML:
            </para>

             <programlisting language="php"><![CDATA[
<!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>
]]></programlisting>
        </sect3>

        <sect3 id="zend.controller.quickstart.go.errorhandler">
            <title>Cree su controlador de errores</title>

            <para>
                Por defecto, está registrado
                <link linkend="zend.controller.plugins.standard.errorhandler">
                    el plugin 'error handler'
                </link>. Este plugin espera que exista
                un controlador para manejar los errores.
                Por defecto, asume un
                <methodname>ErrorController</methodname>
                en el módulo default con un método
                <methodname>errorAction</methodname>
                :
            </para>

             <programlisting language="php"><![CDATA[
class ErrorController extends Zend_Controller_Action
{
    public function errorAction()
    {
    }
}
]]></programlisting>

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

             <programlisting language="php"><![CDATA[
<!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>
]]></programlisting>
        </sect3>

        <sect3 id="zend.controller.quickstart.go.finish">
            <title>¡Vea el sitio!</title>

            <para>
                Con su primer controlador y vista, ya puede arrancar su navegador y acceder a su sitio.
                Asumiendo que
                <methodname>example.com</methodname>
                es su dominio, cualquiera de las siguientes URLs le llevará a
                la página que acaba de crear:
            </para>

            <itemizedlist>
                <listitem>
                    <para>
                        <methodname>http://example.com/</methodname>
                    </para>
                </listitem>
                <listitem>
                    <para>
                        <methodname>http://example.com/index</methodname>
                    </para>
                </listitem>
                <listitem>
                    <para>
                        <methodname>http://example.com/index/index</methodname>
                    </para>
                </listitem>
            </itemizedlist>

            <para>
                Ya está listo para empezar a crear más métodos de controladores y acciones. ¡Felicidades!
            </para>
        </sect3>
    </sect2>
</sect1>
<!--
    vim:se ts=4 sw=4 et:
-->
