Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Todos los logos y marcas utilizados en este documento, estn registrados y pertenecen a sus respectivos dueos.
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
Para nosotros (aunque pueden existir otras alternativas viables) el "entorno ideal" sera poder contar con un servidor GNU/Linux con un servidor web como Apache, el mdulo mod_rewrite habilitado,
El "entorno ideal" puede cambiar y/o sustituir algunos componentes con otras alternativas (por ej. en el caso de no contar con mod_rewrite), pero lo "ideal" sera que nuestro servidor o servicio de hosting contara con estos servicios y trabajramos con todas las herramientas requeridas y con las cuales se seleccionaron para usar con el framework.
PHP5 en su versin 5.1.4 o superior y asegurarnos que est instalado PDO para poder realizar operaciones sobre las bases de datos (Zend requiere que se active esta API).
PDO es una extensin que provee una capa de abstraccin de acceso a datos para PHP 5, con lo cual se consigue hacer uso de las mismas funciones para hacer consultas y obtener datos entre distintos manejadores de bases de datos (una capa ms de abstraccin).
El Mod Rewrite es un mdulo para el servidor Apache que nos permite reescribir las apariencias de las URLs. A travs de diferentes reglas y condiciones se pueden personalizar esas URLs o Permalinks de nuestras pginas de forma que podamos conseguir enlaces ms amigables para los buscadores y para nuestros visitantes. Por ej., en vez de /index.php?mod=estadisticas&usuario=1 podramos tener /estadisticas/usuario/1
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
. Sin embargo, si ests ms acostumbrado a la plataforma Windows existe tambin un combo que se llama WAMP. Una de las herramientas que rene
todos los elementos anteriores necesarios de manera muy sencilla se llama Xampp. Para instalarlo solo tienen que seguir los pasos indicados segn el paquete correspondiente a nuestro sistema operativo. Si nuestro GNU/Linux no tuviera PHP5, existen un paquete en Xampp que soluciona este problema.
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
Una forma de verificar nuestro entorno es ejecutar un index.php con un simple "phpinfo();"
Configuracin Base
Editamos el archivo httpd.conf de configuracin de Apache ubicado generalmente en C:\xampp\apache\conf Cdigo:
#LoadModule rewrite_module modules/mod_rewrite.so
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
Luego debemos reiniciar Apache para que apliquen los cambios en los archivos de configuracin.
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
Ahora abrimos nuestro navegador favorito (solo Firefox ;-)) y escribimos la direccin URL http://localhost/ para ver una simple pgina con nuestro texto de burla al mundo de programadores que an no usa Zend Framework.
No nos olvidamos de la etiqueta de cierre ?> de PHP! Se debe omitir intencionalmente cuando se trata de archivos PHP que contengan slo cdigo PHP como por ejemplo las clases. Estamos omitiendo intencionalmente para evitar la salida involuntaria caracteres o espacios en blanco que se puedan producirse. De hecho, esta es una de las "mejores prcticas" recomendadas por el estndar de Zend Framework.
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
necesitaremos crear la estructura estndar (definida por Zend) para alojar todos los elementos que vayamos necesitando agregar de acuerdo a los componentes de MVC que requiere nuestra aplicacin. La estructura de directorio debera de tener la siguiente forma:
proyecto-zf/ application/ controllers/ models/ views/ scripts/ helpers/ filters/ library/ public/
Podemos ver una estructura que probablemente se repetir en la mayora de los framework: los directorios controllers, models y views. Cada vez que necesitemos crear una funcionalidad en nuestro sistema deberemos crear cada uno de los archivos que representarn a los componentes del MVC para poder responder a ese
Aqu podemos empezar a entender las ventajas de un framework a la hora de organizar la estructura de nuestro sistema: nunca ms discutiremos donde deberamos ubicar el archivo de configuracin o donde deberan ir los componentes de nuestro sistema. Ya est resuelto y nosotros debemos seguir la forma de trabajo definida.
requerimiento. Por lo general crearemos en cada directorio un controller, un modelo y una vista (aunque esto puede variar, en esencia es la situacin ms tpica).
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
10
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
11
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
12
el primer bloque que va de la primer barra ("/") posterior al nombre del proyecto hasta la siguiente barra se corresponder con el nombre del controller. Por lo tanto deber existir un archivo fsico UsuarioController.php en el directorio "controllers" (si no existe, el sistema dar error por no encontrarlo). el segundo bloque hasta la siguiente barra ser la "accin" y se traducir como un mtodo del controller con la siguiente nomenclatura " verAction". Y todo lo que siga a continuacin ser siempre los parmetros con la siguiente estructura: "parmetro/valor/parmetro/valor". Nuevamente, encontramos la misma ventaja que al principio, tenemos resuelta la forma de organizar nuestro sistema y donde colocar cada componente y funcionalidad, que no es poco si consideramos el tiempo que se puede perder en tratar de definir todas estas reglas y estructuras si las discutimos de cero con un equipo de personas donde cada uno tiene su propia opinin de cmo hacerlo.
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
13
De qu nos sirve? Nos permite agregar un nivel ms de organizacin en nuestros sistemas, crear mdulos que podran ser usados entre aplicaciones. Qu recomiendan? Aprender a usar el sistema modular, la mayor dificultad es aprender a organizarse y definir claramente los mdulos que tendr nuestro sistema. El error ms comn es contar con mdulos y crear controllers con el mismo nombre (porque no se nos ocurri un nombre para cada uno): /usuario/usuario/ver/id/1
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
14
En vez de tener el manejo de usuarios y de administradores todos juntos en un mismo directorio de controllers, bien podramos tener un "mdulo" organizado para resolver cada tema en particular, y que posteriormente hasta podra reusarse entre proyectos.
Ilustracin 1 - Ejemplo del proyecto Zend Framework
Aqu podemos visualizar el contenido de ambos mdulos: admin y usuarios, donde cada uno mantiene la misma organizacin MVC pero con su propio contenido de acuerdo a la responsabilidad del mdulo.
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
15
En esta primer etapa usaremos una versin "no modular" del sistema.
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
16
TIPS Si tenemos la ruta a nuestro servidor web en c:\xampp\htdocs podemos decirle a nuestro IDE que cree en este directorio todos los proyectos, lo que nos permitir de forma simple poder trabajar en varios sistemas a la vez accediendo a http://localhost/nombreproyecto
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
17
componentes
Framework,
podemos
descargar la gua de Referencia para el desarrollador y la gua de estudio para la certificacin en formato pdf.
Descargamos Zend Framework "ltima versin tar.gz". Luego lo descomprimimos, y copiamos la carpeta Zend (ubicada en \library\Zend) en el directorio library de nuestro proyecto (c:/xampp/htdocs/zfproyecto/library).
Recordar: configuracin versus convencin, si respetamos las reglas de nombres el framework logra encontrar los componentes que tiene que ejecutar.
Esto significa que se debe reescribir todas las peticiones a un nico script PHP que inicializar el FrontController, de ah la razn de por qu si queremos acceder a un directorio particular el sistema (a travs de las reglas de .htaccess) redireccionar
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
18
Esta regla de sobreescritura se entregar a todas las peticiones de URLs que no terminen en .js, .ico, .gif, .jpg, .png, or .css a travs de index.php. El archivo index.php es la puerta de entrada a nuestra aplicacin, equivaldra al mtodo "main" de Java o C, por eso se lo conoce comnmente con el nombre bootstrap, que quiere decir el arranque, o proceso de inicio de la aplicacin. Casi sin darte cuenta, eso es todo! Zend Framework est instalado y listo para usar.
Repasemos
1. Creamos nuestro proyecto 2. Creamos la estructura de directorios 3. Creamos nuestro bootstraps con su .htaccess 4. Bajamos Zend en el directorio library Estamos listos!
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
19
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
20
A continuacin creamos nuestro index.php (bootstrap) y lo guardaremos dentro de la carpeta public junto a nuestro .htaccess. Deber contener el siguiente cdigo:
<?php error_reporting(E_ALL | E_STRICT); $rootPath = dirname(dirname(__FILE__)); set_include_path(get_include_path() . PATH_SEPARATOR . $rootPath . '/library' . PATH_SEPARATOR); require_once 'Zend/Controller/Front.php'; $frontController = Zend_Controller_Front::getInstance(); $frontController->setControllerDirectory('../application/controllers') ->throwExceptions(true) ->dispatch();
Listo, esto es lo mnimo para funcionar: 1. Agregamos el mximo de detalle para los errores (ya que estamos desarrollando) 2. definimos cual es la ruta por defecto donde est posicionado el sistema 3. definimos la ruta por defecto para encontrar la librera del framework 4. requerimos el Front Controller
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
21
Lo que hicimos aqu es definir el controller por defecto, mantuvimos la "convencin" de crear un IndexController y extendemos de la clase Zend_Controller _Action toda la estructura y funcionalidad base que debe contar un Controller.
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
22
Importante: Convencin de Nombres Aqu nos enfrentamos por primera vez a una convencin de nombres para una clase que es completamente ajena y distinta a los estndares preestablecidos. Lo habitual sera que una clase se llamara ZendControllerAction (como en Java), pero Zend decidi que en el nombre de la clase se define la ruta para llegar a ella (conocido caso del problema de manejo de paquetes / espacios de nombres de PHP). Por consiguiente, si tenemos una clase que dice Zend_Controller _Action la debemos buscarla fsicamente dentro de library/Zend/Controller/Action.php Y su nombre interno ser abstract class Zend_Controller_Action implements Zend_Controller_Action_Interface Recomendamos como ejercicio empezar a conocer el cdigo de ZF: busquen dentro del directorio library y editen el cdigo fuente de Action.php e investiguen un rato cmo est escrito, cmo funciona, el uso de PHPDoc, etc.
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
23
que contiene una sentencia que crea un atributo "titulo", algo que posteriormente dentro de la vista lo veremos cmo $this->titulo, como si fuera un atributo pblico de la vista que fue cargado desde el controller. La sentencia render() se usa para especificar que el control de la ejecucin del controller se dirija a la vista.
TIPS Aunque podemos eliminar la lnea render de nuestro controller, cuando termine la ejecucin del mtodo este ir automticamente a su vista. De todas formas se sugiere siempre hacer uso del render, ya que ZF se puede configurar que la aplicacin no haga esta resolucin automtica y todo nuestro sistema dejara de funcionar.
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
24
Atributos Pblicos?! Aqu es donde nos empezamos a dar cuenta que el estndar de POO prohibido los atributos pblicos no se cumple al pi de la letra, y que en este nuevo contexto de MVC y de solucin Zend estara aceptada esta prctica. Podramos razonar que en s no estamos diseando una clase Vista de cero, estamos trabajando con un componente que existe previamente y que estamos accediendo a sus datos pblicos de forma gil ( bueno, ni nosotros nos cremos esta explicacin ;-), pero la razn real debe haber sido ofrecernos una forma gil de pasar los datos entre el Controller y la Vista. Nosotros no podemos definir mtodos get/set porque la instancia ya se encuentra creada y los atributos los estamos definiendo dinmicamente )
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
25
Ey! la primer lnea no tiene un ";" al final? Bueno, en este caso tampoco es necesario ya que le estamos diciendo a PHP con el ?> que no sigue nada ms, por lo tanto el ";" se puede evitar
Felicitaciones!, hemos terminado nuestro primer proyecto con Zend Framework Hola Mundo!.
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
26
AUTOR: Andrs Guzmn Fontecilla. Email: andresguzf@gmail.com WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5
27