TigerZF
🌐Español

14.2. Inicio rápido de Zend_Application

Hay dos caminos para empezar a usar Zend_Application, y dependen de cómo inicie su proyecto. En cada caso, siempre empieza creando una clase Bootstrap, y un archivo de configuración relacionado.

Si planea usar Zend_Tool para crear su proyecto, continúe leyendo a continuación. Si va a añadir Zend_Application a un proyecto ya existente, querrá saltar más adelante.

14.2.1. Uso de Zend_Tool

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

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

% zf create project newproject

O el comando zf.bat de Windows:

C:> zf.bat create project newproject

Ambos crearán una estructura de proyecto similar a la 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 está en newproject/application/Bootstrap.php, y se ve así inicialmente:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}

También notará que se crea un archivo de configuración, newproject/application/configs/application.ini. Tiene 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

Todas las configuraciones de este archivo de configuración son para su uso con Zend_Application y su bootstrap.

Otro archivo de interés es el archivo newproject/public/index.php, que invoca Zend_Application y lo despacha.

// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH',
              realpath(dirname(__FILE__) . '/../application'));

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV',
              (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
                                         : 'production'));

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

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
            ->run();

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

14.2.2. 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 base necesaria para Zend_Application.

  • Modificar su public/index.php para utilizar Zend_Application.

Primero, cree su clase Bootstrap. Cree un archivo, application/Bootstrap.php, con el siguiente contenido:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}

Ahora, cree su configuración. Para este tutorial, usaremos una configuración de estilo INI; puede, por supuesto, usar un archivo de configuración XML, JSON, YAML, o PHP también. Cree el archivo application/configs/application.ini, y proporcione 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, public/index.php. Si el archivo no existe, créelo; de lo contrario, reemplácelo con el siguiente contenido:

// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH',
              realpath(dirname(__FILE__) . '/../application'));

// Define application environment
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';

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
            ->run();

Puede notar que el valor de la constante del entorno de la aplicación busca una variable de entorno "APPLICATION_ENV". Recomendamos establecer esto en el entorno de su servidor web. En Apache, puede establecerlo ya sea 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]
[Note] Aprenda sobre mod_rewrite

Las reglas de reescritura anteriores permiten el acceso a cualquier archivo bajo la raíz de documentos de su host virtual. Si hay archivos que no desea exponer de esta manera, es posible que desee ser más restrictivo en sus reglas. Vaya al sitio web de Apache para aprender más sobre mod_rewrite.

En este punto, ya está listo para empezar a aprovechar Zend_Application.

14.2.3. Añadir y crear recursos

Si siguió las instrucciones anteriores, su clase bootstrap utilizará un controlador frontal, y cuando se ejecute, despachará el controlador frontal. Sin embargo, es muy probable que necesite un poco más de configuración que esto.

En esta sección, veremos cómo añadir dos recursos a su aplicación. Primero, configuraremos sus layouts, y luego personalizaremos su objeto view.

Uno de los recursos estándar proporcionados con Zend_Application es el recurso "layout". Este recurso espera que defina valores de configuración que luego usará para configurar su instancia de Zend_Layout.

Para usarlo, todo lo que necesitamos 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 aún no lo ha hecho, cree el directorio application/layouts/scripts/, y el archivo layout.phtml dentro de ese directorio. Un buen layout inicial es el siguiente (y se conecta con el recurso view que se cubre 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, ya tendrá un layout funcional.

Ahora, añadiremos un recurso view personalizado. Al inicializar la vista, querremos establecer el DocType HTML y un valor predeterminado para el título a usar en el head HTML. Esto se puede lograr editando su clase Bootstrap para añadir un método:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initView()
    {
        // Initialize view
        $view = new Zend_View();
        $view->doctype('XHTML1_STRICT');
        $view->headTitle('My First Zend Framework Application');

        // Add it to the ViewRenderer
        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
            'ViewRenderer'
        );
        $viewRenderer->setView($view);

        // Return it, so that it can be stored by the bootstrap
        return $view;
    }
}

Este método se ejecutará automáticamente cuando haga bootstrap de la aplicación, y garantizará que su vista se inicialice de acuerdo con las necesidades de su aplicación.

14.2.4. Próximos pasos con Zend_Application

Lo anterior debería servirle para empezar con Zend_Application y la creación del bootstrap de su aplicación. A partir de aquí, debería empezar a crear métodos de recursos, o, para máxima reutilización, clases plugin de recursos. ¡Continúe leyendo para aprender más!