<?xml version="1.0" encoding="UTF-8"?>
    <!-- EN-Revision: 20763 -->
    <!-- Reviewed: no -->
<sect1 id="zend.application.quick-start">
    <title>Inicio rápido con Zend_Application</title>

    <para>
        Hay dos caminos para empezar con
        <classname>Zend_Application</classname>
        , y dependen de cómo inicia su
        proyecto. En cada caso, siempre se comienza con la creación de
        la
        clase
        <classname>Bootstrap</classname>
        , y un archivo de configuración asociado.
    </para>

    <para>
        Si se planea utilizar
        <classname>Zend_Tool</classname>
        para crear su
        proyecto, continúe leyendo. Si va añadir
        <classname>Zend_Application</classname>
        a un proyecto existente,
        debe
        <link linkend="zend.application.quick-start.manual"> ir aquí</link>
        .
    </para>

    <sect2 id="zend.application.quick-start.zend-tool">
        <title>Usando Zend_Tool</title>

        <para>
            La forma más rápida para comenzar a utilizar
            <classname>Zend_Application</classname>
            es usar
            <classname>Zend_Tool</classname>
            para generar su proyecto.
            Esto también creará su clase y archivo
            <classname>Bootstrap</classname>
            .
        </para>

        <para>
            Para crear un proyecto, ejecute el comando
            <command>zf</command>
            (en sistemas *nix):
        </para>

        <programlisting language="sh"><![CDATA[
% zf create project newproject
]]></programlisting>

        <para>
            O el comando
            <filename>zf.bat</filename>
            en Windows:
        </para>

        <programlisting language="dos"><![CDATA[
C:> zf.bat create project newproject
]]></programlisting>

        <para>
            Ambos crearán una estructura del proyecto que se parece a lo siguiente:
       </para>

        <programlisting language="text"><![CDATA[
newproject
|-- application
|   |-- Bootstrap.php
|   |-- configs
|   |   `-- application.ini
|   |-- controllers
|   |   |-- ErrorController.php
|   |   `-- IndexController.php
|   |-- models
|   `-- views
|       |-- helpers
|       `-- scripts
|           |-- error
|           |   `-- error.phtml
|           `-- index
|               `-- index.phtml
|-- library
|-- public
|   `-- index.php
`-- tests
    |-- application
    |   `-- bootstrap.php
    |-- library
    |   `-- bootstrap.php
    `-- phpunit.xml
]]></programlisting>

        <para>
            En el diagrama anterior, su bootstrap se encuentra en
            <filename>newproject/application/Bootstrap.php</filename>
            , y al principio
            se vería así:
        </para>

        <programlisting language="php"><![CDATA[
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{}
]]></programlisting>

        <para>
            También notará que se ha creado un archivo de configuración,
            <filename>newproject/application/configs/application.ini</filename>
            .
            Con el siguiente contenido:
        </para>

        <programlisting language="dosini"><![CDATA[
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
]]></programlisting>

        <para>
            Todos las opciones en este archivo de configuración son para
            su uso con
            <classname>Zend_Application</classname>
            y su bootstrap.
        </para>

        <para>
            Otro archivo de interés es
            <filename>newproject/public/index.php</filename>
            ,
            el cual invoca a
            <classname>Zend_Application</classname>
            y lo envía.
        </para>

        <programlisting language="php"><![CDATA[
<?php
// Define el path al directorio de la aplicación
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH',
              realpath(dirname(__FILE__) . '/../application'));

// Define el entorno de la aplicación
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV',
              (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
                                         : 'production'));

/** Zend_Application */
require_once 'Zend/Application.php';

// Crea la application, el bootstrap, y lo ejecuta
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
             ->run();
]]></programlisting>

        <para>
            Para continuar con el inicio rápido, por favor
            <link linkend="zend.application.quick-start.resources">
                vaya a la sección de Recursos</link>
            .
        </para>
    </sect2>

    <sect2 id="zend.application.quick-start.manual">
        <title>Añadir Zend_Application a su aplicación</title>

        <para>
            Los fundamentos de
            <classname>Zend_Application</classname>
            son bastante simples:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    Crear un archivo
                    <filename>application/Bootstrap.php</filename>
                    , con la
                    clase
                    <classname>Bootstrap</classname>
                    .
                </para>
            </listitem>

            <listitem>
                <para>
                    Crear un archivo de configuración
                    <filename>application/configs/application.ini</filename>
                    con la configuración básica necesaria para
                    <classname>Zend_Application</classname>
                    .
                </para>
            </listitem>

            <listitem>
                <para>
                    Modificar su
                    <filename>public/index.php</filename>
                    para usar
                    <classname>Zend_Application</classname>
                    .
                </para>
            </listitem>
        </itemizedlist>

        <para>
            Primero, genere su clase
            <classname>Bootstrap</classname>
            . Crear un archivo,
            <filename>application/Bootstrap.php</filename>
            , con el siguiente contenido:
        </para>

        <programlisting language="php"><![CDATA[
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}
]]></programlisting>

        <para>
            Ahora, debe crear su configuración. Para este tutorial, usaremos
            una configuración de
            estilo
            <acronym>INI</acronym>
            ; puede, por supuesto,
            usar un archivo de configuración
            <acronym>XML</acronym>
            o
            <acronym>PHP</acronym>
            . Cree el archivo
            <filename>application/configs/application.ini</filename>
            , proporcionando
            el siguiente contenido.
        </para>

        <programlisting language="dosini"><![CDATA[
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
]]></programlisting>

        <para>
            Ahora, modifiquemos su script de entrada (gateway),
            <filename>public/index.php</filename>
            . Si el archivo no existe, cree uno;
            de lo contrario, sustitúyalo por el siguiente
            contenido:
        </para>

        <programlisting language="php"><![CDATA[
<?php
// Define la ruta al directorio de la aplicación
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH',
              realpath(dirname(__FILE__) . '/../application'));

// Define el entorno de la aplicación
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV',
              (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
                                         : 'production'));

// Typically, you will also want to add your library/ directory
// to the include_path, particularly if it contains your Zend Framework installed
set_include_path(implode(PATH_SEPARATOR, array(
    dirname(dirname(__FILE__)) . '/library',
    get_include_path(),
)));

/** Zend_Application */
require_once 'Zend/Application.php';

// Crea la aplicación, el bootstrap, y lo ejecuta
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
            ->run();
]]></programlisting>

        <para>
            Se puede observar que el valor constante del entorno de la aplicación
            busca una variable
            de entorno "APPLICATION_ENV".
            Recomendamos este ajuste en el entorno de su servidor web.
            En Apache, puede también configurarlo en la definición de su vhost,
            o en su archivo
            <filename>.htaccess</filename>
            . Recomendamos el siguiente
            contenido para su archivo
            <filename>public/.htaccess</filename>
            :
        </para>

        <programlisting language="conf"><![CDATA[
SetEnv APPLICATION_ENV development

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>

        <note>
            <title>Más información sobre mod_rewrite</title>

            <para>
                Las reglas de reescritura le permitin reescribir el acceso a
                cualquier archivo en la raíz de los documentos web de su host virtual.
                Si hay archivos que no desea que esten expuestos y desea ocualtarlos, puedes
                ser mas restrictivo en tus reglas
                Ir a la página web de Apache
                <ulink url="http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html">para obtener más información acerca de about mod_rewrite</ulink>
                .
            </para>

        </note>

        <para>
            En este punto, está listo para comenzar a usar las ventajas de
            <classname>Zend_Application</classname>
            .
        </para>
    </sect2>

    <sect2 id="zend.application.quick-start.resources">
        <title>Agregando y Creando Recursos</title>

        <para>
            Si ha seguido las instrucciones anteriores, entonces su clase de
            arranque estará
            utilizando un controlador frontal (front controller),
            y cuando se ejecute, enviará el
            controlador frontal (front controller).
            Sin embargo, con toda probabilidad, necesitará un
            poco más de
            configuración que ésta.
       </para>

        <para>
            En esta sección, veremos como añadir dos recursos a su aplicación.
            En primer lugar,
            estableceremos los layouts,
            y luego vamos a personalizar sus objetos de la vista.
       </para>

        <para>
            Uno de los recursos estándar provistos con
            <classname>Zend_Application</classname>
            es el recurso "layout".
            Este recurso espera que definas valores de configuración, los
            que
            entonces utilizará para configurar su instancia
            <classname>Zend_Layout</classname>
            .
        </para>

        <para>
            Para usarlo, todo lo que tenemos que hacer es actualizar el
            archivo de configuración.
       </para>

        <programlisting language="dosini"><![CDATA[
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
; ADD THE FOLLOWING LINES
resources.layout.layout = "layout"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
]]></programlisting>

        <para>
            Si hasta ahora no lo ha hecho, genere el directorio
            <filename>application/layouts/scripts/</filename>
            , y el archivo
            <filename>layout.phtml</filename>
            dentro de ese directorio. Un buen layout
            inicial es como sigue
            (y vincularlo con los
            recursos de la vista que cubriremos a continuación):
        </para>

        <programlisting language="php"><![CDATA[
<?php echo $this->doctype() ?>
<html>
<head>
    <?php echo $this->headTitle() ?>
    <?php echo $this->headLink() ?>
    <?php echo $this->headStyle() ?>
    <?php echo $this->headScript() ?>
</head>
<body>
    <?php echo $this->layout()->content ?>
</body>
</html>
]]></programlisting>

        <para>
            En este punto, usted tendrá un layout ya trabajando.
       </para>

        <para>
            Ahora, vamos añadir una vista de recurso personalizada.
            Cuando se inicializa la vista,
            queremos establecer el DocType
            <acronym>HTML</acronym>
            y un valor predeterminado del título para utilizarlo en la cabecera
            de
            <acronym>HTML</acronym>
            . Esto puede llevarse a cabo editando su clase
            <classname>Bootstrap</classname>
            para agregar un método.
        </para>

        <programlisting language="php"><![CDATA[
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{    protected function _initView()
    {
        // Inicializar la vista
        $view = new Zend_View();
        $view->doctype('XHTML1_STRICT');
        $view->headTitle('My First Zend Framework Application');

        // Añadir al ViewRenderer
        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
            'ViewRenderer'
        );
        $viewRenderer->setView($view);

        // Retorno, de modo que pueda ser almacenada en el arranque (bootstrap)

        return $view;
    }
}]]></programlisting>

        <para>
            Este método se ejecuta automáticamente cuando arranca la aplicación,
            y se asegurará que
            su vista sea inicializada según las necesidades
            de su aplicación.
       </para>
    </sect2>

    <sect2 id="zend.application.quick-start.next-steps">
        <title>Próximos pasos con Zend_Application</title>

        <para>
            Con lo anterior debería poder comenzar con
            <classname>Zend_Application</classname>
            y con la creación del bootstrap de su aplicación. De aquí, usted debe comenzar a
            crear
            sus métodos de recursos, o para la máxima re-usabilidad,
            clases de recursos de plugin. Y
            seguir leyendo para aprender más!
        </para>
    </sect2>
</sect1>
