<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 16727 -->
<!-- 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 ZF 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>
