El Bootstrapping es el proceso de arranque de toda la aplicación que Zend_Tool ha diseñado, está compuesto por tres archivo así: index.php, application.ini y Bootstrap.php
index.php
Se encuentra dentro del directorio public y es el principal punto de entrada para todas las peticiones realizadas a la aplicación. Todas las solicitudes realizadas son enrutadas a través de este archivo.
Se describe brevemente su código
Código:
// 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'));
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../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();
La constante APPLICATION_PATH define la ruta del directorio application, este valor permite acceder a todos los archivos almacenados dentro de la estructura del directorio creado.
La constante APPLICATION_ENV define la forma como se comportará la aplicación en entornos de desarrollo para que muestre o no mensajes de error, bien sea que nuestra aplicación este en producción o desarrollo, esto se logra teniendo en cuenta la función getenv() que permite comprobar las variables de entorno del sistema.
En la siguiente línea se debe garantizar la inclusión de la librería de clases de Zend Framework mediante el include_path. Para inicializar y crear la aplicación se vincula mediante require_once la clase Application.php , ésta mediante su constructor pasa dos valores, el ambiente o entorno de desarrollo y el path del archivo inicial de configuración application.ini.
Application.php se encarga también entre otras cosas de autocargar las clases solicitadas cuando se crean sus respectivas instancias, esto es facilitado por la clase
require_once 'Zend/Loader/Autoloader.php'; además, mediante el patrón de diseño Singleton permite sólo crear una instancia de dicha clase.
public static function getInstance()
{
if (null === self::$_instance) {
self::$_instance = new self();
}
return self::$_instance;
}
Esta clase Autoloader.php también contiene métodos para el control de namespaces, por defecto los namespaces activos son Zend y ZendX
Como última línea del archivo index.php aparece
$application->bootstrap() ->run();
Boostrap() inicializa la aplicación y el método run() inicializa el proceso MVC, la forma de ejecutar dos métodos seguidos se conoce como interfaces fluidas, método sugerido por Martin Fowler donde se pretende simplificar la utilización de métodos de la clase, para que esto funcione correctamente cada método retornará la misma instancia del objeto.
Para que index.php se convierta en nuestra entrada principal, se tiene que activar el modulo mod_rewrite del servidor Web Apache para reescribir URL´s. además crear un archivo con nombre .htaccess. Zend_Tool hace esto por nosotros y lo ubica en la carpeta public al lado de index.php.
public / .htaccess
SetEnv APPLICATION_ENV development
RewriteEngine On
RewriteCond% {} REQUEST_FILENAME-s [OR]
RewriteCond% {} REQUEST_FILENAME-l [OR]
RewriteCond% {}-d REQUEST_FILENAME
RewriteRule ^ .* $ - [NC, L]
RewriteRule ^ .* $ index.php [NC, L]
En éste archivo también podemos asignar a la variable de entorno SetEnv APPLICATION_ENV como desarrollo “development” y luego la podríamos cambiar según el ambiente de la aplicación.
Para que el patrón de diseño MVC de ZendFramework funcione correctamente el archivo index.php y .htaccess deberán estar articulados en forma optima, esto constituye la base de otro patrón de diseño “Front Controller”
El Front Controller proporciona un punto de entrada único que controla y gestiona las peticiones Web realizadas, él decide qué controlador o que acción se llamará cuando se realice una petición.
Application.ini
Nuestra aplicación necesita un archivo de configuración básico para inicializar todo el entorno de trabajo, Zend_Tool crea en forma automática esta configuración previa en la ruta application / configs / application.ini
y el contenido inicial es:
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
[staging : production]
[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
; comentarios
[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1
Se aprecia los diferentes ambientes en los cuales la aplicación puede ser ejecutada, cada sección (staging,testing y development) sobreescribira los mismos valores de la sección principal [production] , de esa forma se pueden generar ambientes específicos o de prueba según se necesite, cada una de estas secciones hereda las líneas de configuración de la sección principal [production]
Bajo application.ini se pueden configurar recursos para ser inicializados, por ejemplo para inicializar la conexión a nuestra base de datos.
[production]
resources.db.adapter = PDO_MYSQL
resources.db.params.host = localhost
resources.db.params.username = root
resources.db.params.password = clave123
resources.db.params.dbname = school2.0
Para inicializar Zend_Layout .
[production]
resources.layout.layout = "NameOfDefaultLayout"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
Bootstrap
El último de los archivos que compone el bootstrapping es Bootstrap.php éste se encuentra ubicado en la ruta application / Bootstrap.php y es creado por Zend_Tool para facilitar el proceso de arranque de la aplicación.
Inicialmente se encuentra vacio, a la espera de métodos específicos que se ejecutaran permanentemente dentro de la aplicación.
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}
Para definir un recurso los nombres de los métodos deberán ser protegidos (protected) y comenzar con _init de esta forma cuando se inicialice la aplicación a través de index.php todos los metodos que cumplan con este prefijo serán ejecutados.
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initFoo()
{
// ...
}
}