miércoles, 18 de enero de 2012

Bootstrapping

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

{

// ...

}

}


martes, 17 de enero de 2012

ZendFramework I - Estructura del sitio

Estructura del proyecto



Creando nuestro proyecto desde la consola D.O.S. o mediante Netbeans la estructura de la aplicación será como aparece en la gráfica. 


El directorio application es el "contenedor" de nuestra aplicación bajo MVC, aquí estará el código de: modelos,  vistas controladores y archivos de configuración como application.ini y Bootstrap.php.



De acuerdo a esta estructura Zend Framework 1.11.11 implementa Zend_Application para facilitar la configuración de bases de datos, manejo de vistas( HTML), reuso de código, archivo de arranque con posibilidad de diferentes ambientes o entornos de trabajo (producción, desarrollo, pruebas),registro de plugins, registro de action helpers y mucho más


Directorio configs: este tiene por defecto el archivo  application.ini el cual  permite configurar entornos de la aplicación, ruta de la libreria, ruta de controladores.
Este directorio se puede contener diferentes archivos .ini los cuales pueden ser llamados desde el archivo Bootstrap.php 


Directorio controllers: por defecto Zend_Tools crea IndexController y ErrorController. La clase IndexController tiene dos metodos init() e indexAction sin código a ejecutar.


class IndexController extends Zend_Controller_Action
{
    public function init()
    {
        /* Initialize action controller here */
    }
    public function indexAction()
    {
        // action body
    }
}


Directorio models: inicialmente vacio


Directorio views: dentro de este se encuentra el directorio helpers(ayudantes de las vistas que permiten reducir y simplificar código repetitivo) y  scripts, aquí encontrará por cada controller una carpeta y sus correspondientes vistas (código HTML).


Directorio Public: Es el directorio de acceso publico, dentro de él se pueden crear  subdirectorios css, javascripts, images. Es la entrada principal de la aplicación, para poder realizar esta función utiliza dos archivos .htaccess e index.php 


Archivo .htaccess


Al tener nuestro VirtualHost activo, todas las peticiones URL hacia nuestro proyecto pasaran por el archivo index.php, esto lo garantiza el archivo .htaccess,(este es un pequeño archivo de texto que permite modificar algunas directivas de Apache de directorios o archivos). La configuración por defecto de este archivo es:


RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]


Directorio Library: Es el lugar de ubicación de la libreria o clases del framework, cuando se trabaja de forma local lo recomendable es crear un sólo directorio con la libreria e incluir en el path la ruta y así evitamos la duplicidad en cada proyecto.

viernes, 6 de enero de 2012

ZendFramework 0 Instalación NetBeans 7.0.1

 NetBeans 7.0.1  IDE(integrated development environment)


Es la herramienta con la cual digitar nuestro código será mucho más fácil, aunque existen alternativas de pago como Zend Studio, NetBeans es uno de los entornos de desarrollo gratuitos mas potentes. Algunas de sus características:


Soporte para JDK 7 (Java Development Kit)
Soporte HMTL 5
Integración de recientes parches 
Mejoras de rendimiento.
Generate PhpDoc
Rename refactoring, Safe Delete Refactoring
PHP 5.3 - Support for aliases


Para que NetBeans se sincronice con nuestro ZendFramework y se pueda utilizar Zend tools desde este IDE, vamos a la línea de comandos y digitamos:

 zf –setup config-file

Dando como respuesta:
Config file written to \Documents and Settings\Administrador/.zf.ini

Esto indica que ha creado dentro de nuestro directorio de usuario un archivo zf.ini que contiene algo similar a lo siguiente:

php.include_path = ".;C:\zend\library;C:\xampp\php\PEAR"


Creando nuestro primer proyecto ZF desde NetBeans

Mediante las siguientes imágenes paso a paso crearemos nuestro proyecto desde NetBeans


Seleccionamos la pestaña general y verificamos que la ruta de ubicación de php.exe este correcta y adicionamos en el include path la ruta donde se encuentra la libreria de ZF


Luego en la pestaña ZEND verificamos la ruta donde se encuentra el archivo zf.bat y damos click en Register Provider para activar el uso de Zend Tools, con esto modificamos nuestro archivo zf.ini creado anteriormente 

Despues de registrar el proveedor, se debe copiar el archivo NetBeansCommandsProvider.php que esta ubicado en C:\Archivos de programa\NetBeans 7.0.1\php\zend y lo debe pegar en el directorio donde se encuentra la librería de zf C:\zend\library si esto no se realiza y usted piensa utilizar la línea de comandos desde una consola, saldrá un error y no permitirá ejecutar comandos.

Con estos procedimientos listos, podemos iniciar la creación de nuestro proyecto.



Damos el nombre del proyecto y la ruta del código fuente, seleccionamos la versión de php y el encoding



Seleccionamos el Framework a trabajar en este caso ZendPHP Web Framework


Al presionar FINISH se creará toda la estructura de nuestro proyecto



Verificamos la correcta configuración de Zend Tools de la siguiente forma: nos ubicamos en el nombre del proyecto, click derecho, opción zend, ejecutar comando (Run Command)



Debe aparecer lo siguiente:


De esta forma queda habilitada la posibilidad de ejecutar todos los comandos e interactuar mucho más fácil entre NetBeans y Zend Framework.

ZendFramework 0

Aspectos generales.

Framework, Compendio de librerías, módulos o bibliotecas de software probadas, seguras y de uso recurrente en la programación, su estructura facilitan el desarrollo rápido de aplicaciones (RAD). 

Zend Framework (ZF),  es un framework 100% orientado a objetos basado en PHP 5, que implementa dentro de su estructura el patrón de diseño MVC( Modelo - Vista- Controlador), su baja dependencia entre sus librerías o componentes permite utilizarlas de manera independiente.


Instalación

Previo a la instalación del ZF  se ha instalado XAMPP 1.7.3 para disponer de nuestro servidor Apache, php y MySQL, aunque esta disponible de forma gratuita Zend Server Community Edition (CE) versión 5.6 como opción alternativa. 

Necesita descargar de http://framework.zend.com/download/latest  la versión Zend Framework 1.11.11 Full, aunque sólo utilizaremos dos directorios, esta versión trae demos y documentación importante para mejorar nuestros conceptos de este importante framework.


Para efectos de nuestro ejemplo creamos en C:\ un directorio (c:\zend) y copiamos los directorios bin y library. El directorio bin contiene el archivo zf.bat que nos permitirá utilizar Zend Tools desde la linea de comandos para crear proyectos, adicionar controladores, modelos, vistas, etc. El directorio library contiene todas la clases propias del Framework.

Se debe adicionar al  PATH en variables de entorno la ruta de ubicación de php.exe, library y bin. para hacerlo nos ubicamos en MiPC ->Propiedades ->Opciones Avanzadas->Varaibles de Entorno




Los cambios en el PATH tendrán efecto después de reiniciar el sistema, para verificar las modificaciones, abrimos una consola de texto y digitamos PATH


Para verificar desde la línea de comandos la correcta instalación de ZF podemos digitar algunos comandos de zend tools.

C:\zf show versión 
Zend Framework Version: 1.9.6
Este comando muestra la versión instalada de ZF; en nuestro ejemplo aparece la versión 1.9.6 y debería aparecer 1.11.11, esto se debe a que algunas versiones de xampp tienen por defecto dentro del directorio PHP\PEAR una librería de ZEND, esta puede provocar algunos conflictos por ser una versión desactualizada. Para superar este inconveniente nos ubicamos dentro de la carpeta PHP de la instalación de xampp y abrimos el archivo PHP.INI buscamos la linea 

include_path = ".;C:\xampp\php\PEAR" 

y le adicionamos como primer orden la ruta de la librería actualizada, con esto al solicitar nuevamente la versión mostrará la versión correcta.

include_path = ".;C:\zend\library;C:\xampp\xampp\php\PEAR"

C:\zf show versión 
Zend Framework Version: 1.11.11

Con esta linea adicionada evitaremos también el mensaje de error en el navegador solicitando zend/application.

Antes de comenzar a crear nuestro proyecto es importante practicar con la línea de comandos de Zend Tools, para comenzar utilizaremos

zf --help
Esta línea nos mostrará todas las diferentes opciones que tenemos desde la línea de comandos, cómo debe ser la sintaxis para realizar las peticiones.

zf show phpinfo
Mostrará la configuración actual que tiene PHP, directivas y sus correspondientes valores, si esta activa o no algún tipo de soporte para funciones especificas, mejoramiento de la seguridad, etc.

zf create project 
Su sintaxis completa es: zf create project path name-of-profile file-of-profile y para crear nuestro proyecto debemos estar dentro del directorio HTDOCS (xampp) que constituye la raíz de todos los proyectos a nivel local.
como ejemplo crearemos nuestro proyecto "contabilidad" así: zf create project contabilidad 

Después de crear el proyecto debemos configurar el VHOST y si deseamos realizar pruebas unitarias debemos incluir en el include_path la ruta donde se encuentra PHPUnit.

Imagen de la estructura del proyecto
  • Un archivo .zfproject.xml que guarda la información del proyecto
  • El directorio application donde están los directorios models,controllers, views, configs y el archivo Bootstrap.php
  • Directorio docs, aquí se puede guardar documentación especifica o relevante del proyecto,
  • Directorio library, aquí deberá estar el compendio de librerías de zendframework cuando el sitio es subido al servidor, para efectos de trabajo local este directorio estará vacio.
  • Directorio public, dentro de este estarán los directorios de imágenes, librerías javascript,Hojas de estilo CSS, el archivo index.php y .htacces 
Ya creado el proyecto procedemos a configurar nuestro VIRTUAL HOST para que las peticiones desde nuestro navegador faciliten la ubicación de nuestro proyecto.

Primero vamos a C:\WINDOWS\system32\drivers\etc\hosts y adicionamos 

127.0.0.1   contabilidad
127.0.0.1   otroProyecto
..

Ahora vamos al archivo httpd-vhosts.conf que se encuentra ubicado en C:\xampp\apache\conf\extra y eliminamos el signo ‘#’ de la línea #NameVirtualHost *:80
Quedando así habilitada para crear nombre virtuales. Procedemos entonces a crear los diferentes vhost

ServerName:
El parámetro ServerName indica el nombre del Servidor que administra Apache, en otras palabras el sitio en cuestión; esto puede ser www.osmosislatina.com, www.google.com.

DocumentRoot:
El parámetro DocumentRoot indica el Directorio raíz del proyecto

DirectoryIndex:
El parámetro DirectoryIndex indica el primer archivo (index.php en este caso) que cargará apache. Es el punto de entrada a la aplicación web

AllowOverride All: Permite que todas las directivas .htaccess de ese directorio tengan prioridad sobre las establecidas en el archivo de configuración de apache. Si se cambia All por None, la configuración del nivel superior prevalece sobre la especificada en .htaccess.  

Order allow, deny:
Allow from all:
Indica el orden de permisos de las líneas siguientes, en este caso primero se pertime(allow)y luego de niega(deny), e inmediatamente debajo  allow from all, indicando que tiene permitido todas las peticiones.

Mod_Rewrite

Para que las peticiones hechas a través del navegador sean controladas por un solo archivo (index.php) debemos descomentar una linea del archivo httpd.conf que se encuentra ubicado en el directorio de apache\conf.

#LoadModule rewrite_module modules/mod_rewrite.so


De esta forma nuestra aplicación quedará habilitada para que el archivo .htaccess enrute todas las peticiones url hacia una sola entrada.



Para que Apache actualice todos los cambios realizados, vamos al panel de administración de xampp y damos Click en  STOP en apache y reiniciamos el servicio dandole START


Para verificar todo el procedimiento simplemente abrimos nuestro navegador y digitamos en la barra de direcciones http://contabilidad, y deberá aparecer la bienvenida de Zend Framework.