# Inicio rápido con Zend_Application

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

Si se planea utilizar `Zend_Tool` para crear su proyecto, continúe leyendo. Si va añadir `Zend_Application` a un proyecto existente, debe ir aquí .

## Usando Zend_Tool

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

Para crear un proyecto, ejecute el comando `zf` (en sistemas *nix):

    % zf create project newproject

O el comando `zf.bat` en Windows:

    C:> zf.bat create project newproject

Ambos crearán una estructura del proyecto que se parece a lo siguiente:

    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

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

    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {}

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

    [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

Todos las opciones en este archivo de configuración son para su uso con `Zend_Application` y su bootstrap.

Otro archivo de interés es `newproject/public/index.php` , el cual invoca a `Zend_Application` y lo envía.

    <?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();

Para continuar con el inicio rápido, por favor vaya a la sección de Recursos .

## Añadir Zend_Application a su aplicación

Los fundamentos de `Zend_Application` son bastante simples:

- Crear un archivo `application/Bootstrap.php` , con la clase `Bootstrap` .

- Crear un archivo de configuración `application/configs/application.ini` con la configuración básica necesaria para `Zend_Application` .

- Modificar su `public/index.php` para usar `Zend_Application` .

Primero, genere su clase `Bootstrap` . Crear un archivo, `application/Bootstrap.php` , con el siguiente contenido:

    <?php
    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
    }

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

    [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

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

    <?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();

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 `.htaccess` . Recomendamos el siguiente contenido para su archivo `public/.htaccess` :

    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]

### Más información sobre mod_rewrite

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 para obtener más información acerca de about mod_rewrite .

En este punto, está listo para comenzar a usar las ventajas de `Zend_Application` .

## Agregando y Creando Recursos

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.

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.

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

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

    [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

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

    <?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>

En este punto, usted tendrá un layout ya trabajando.

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

    <?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;
        }
    }

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.

## Próximos pasos con Zend_Application

Con lo anterior debería poder comenzar con `Zend_Application` 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!