1_2_zf2_primeros_pasos

30
 Curso: "Zend Framework 2" 2013 “ Primeros Pasos ZF2 Releases” Módul o 1 / parte 2 © Todos los logos y marcas utilizados en este documento, están registrados y pertenecen a sus respectivos dueños.  AUTOR: Andrés Guzmán Fontecilla. Email: andresguzf@gmai l.com WEB: http://www.bolsadeideas.cl/ servicios/cursos -de-capacitacion/ LICENCIA: http://creativecommo ns.org/licenses/by-nc/ 2.5 1

Upload: antonio-reyes

Post on 04-Oct-2015

45 views

Category:

Documents


0 download

DESCRIPTION

configurar

TRANSCRIPT

  • Curso: "Zend Framework 2" 2013

    Primeros Pasos ZF2 Releases

    Mdulo 1 / parte 2

    Todos los logos y marcas utilizados en este documento, estn registrados y pertenecen a sus respectivos dueos.

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    1

  • Curso: "Zend Framework 2" 2013 Introduccin

    Uno de los temas que ms se ha tratado estos ltimos aos en los equipos de

    desarrollo es cmo mejorar la productividad, evitar perder tiempo en tareas repetitivas, o en construccin de funcionalidades que deberan ser rpidas de conseguir

    por lo bsico y necesario de su existencia. La esencia de los frameworks es servirnos como caja de herramientas para construir no solo sistemas, tambin nuevas herramientas. ZF2 no se ha quedado atrs, ahora no solo debemos estar preparados y actualizados en el desarrollo general usando nuestro lenguaje base, PHP,

    sino, invertir grandes cantidades de tiempo para seguir el vertiginoso avance de estas

    herramientas (y que muchas veces no podemos abarcar absolutamente todo lo que

    ofrecen y debemos concentrarnos en lo que realmente vamos a necesitar en el

    proyecto que estemos trabajando actualmente).

    Y como complemento, iremos aplicando en cada nuevo tema una serie de exigentes

    tareas desafo adecuadas a los tiempos que corren, tratando con esto aumentar nuestra profesionalidad, ya que a pesar de contar con una excelente caja de

    herramientas, debemos seguir siendo desarrolladores que deben saber trabajar adecuadamente con objetos (POO), ms all de la herramienta que seleccionemos para solucionar nuestros problemas.

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    2

  • Curso: "Zend Framework 2" 2013 Objetivos Este captulo busca iniciarnos en todo el procedimiento de crear un proyecto Zend los

    componentes principales del ZF2 Releases y todos los detalles que hay que tener en cuenta.

    Sobre los contenidos de las guas de estudio: si bien la mayora de la informacin que vamos a referenciar en estas guas de estudio se extraen de los manuales oficiales, las guas nunca debern ser sustituto de los manuales, ya que esta debe ser siempre nuestra fuente principal de consulta. En las guas iremos agregando experiencia personal obtenida del trabajo diario con el framework y ordenando los temas con un criterio que consideramos evolutivo y que facilita el aprendizaje simulando situaciones cercanas a la realidad de cualquier desarrollo que se inicia de cero.

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    3

  • Curso: "Zend Framework 2" 2013 Requerimientos Mnimos

    ZF2 Releases al estar escrito en PHP 5.3, un lenguaje multiplataforma, puede ejecutarse en la mayora de los S.O tales como Linux, Mac OS X, Microsoft Windows,

    Solaris, etc.

    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,

    PHP5 en su versin 5.3 o superior y asegurarnos que est instalado PDO para poder realizar operaciones sobre las bases de datos, generalmente viene activado por defecto.

    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

    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.

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    4

  • Curso: "Zend Framework 2" 2013 Si trabajamos en GNU/Linux, casi cualquier distribucin moderna incluye PHP5, MySQL5 y Apache2 (este combo es comnmente llamado LAMP por las siglas de sus componentes).

    .

    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: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    5

  • Curso: "Zend Framework 2" 2013 Primera configuracin

    Una vez instalado nuestro entorno de trabajo

    con todos sus elementos, puede que

    necesitemos hacer un par de ajustes antes de

    usar ZF2.

    Si nuestro entorno es Windows

    Al instalar Xampp no necesitamos configurar nada ms ya que viene listo para usar ZF, as que las configuraciones de ms abajo no deberan requerirse, pero por las dudas

    podemos revisarlas y ya conocer cmo y donde es que se configuran.

    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

    Le quitamos el comentario # dejndolo as

    Cdigo:

    LoadModule rewrite_module modules/mod_rewrite.so

    Una forma de verificar nuestro entorno es

    ejecutar un index.php con un simple "phpinfo();"

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    6

  • Curso: "Zend Framework 2" 2013 Tambin tenemos que asegurarnos (en caso de no usar XAMPP puesto que viene listo

    para usar) de que Apache est configurado para admitir el archivo .htaccess. Esto se

    hace generalmente modificando en el archivo httpd.conf:

    AllowOverride None por

    AllowOverride All

    Lo encontramos dentro del elemento que apunta hacia el directorio web root, por ejemplo en el caso de Xampp sera ms o menos as:

    # # Possible values for the Options directive are "None", "All", # or any combination of: # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews # # Note that "MultiViews" must be named *explicitly* --- "Options All" # doesn't give it to you. # # The Options directive is both complicated and important. Please see # http://httpd.apache.org/docs/2.2/mod/core.html#options # for more information. # Options Indexes FollowSymLinks Includes ExecCGI # # AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywords: # Options FileInfo AuthConfig Limit # AllowOverride All # # Controls who can get stuff from this server. # Require all granted

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    7

  • Curso: "Zend Framework 2" 2013 Luego editamos el archivo php.ini en c:\xampp\php

    Cdigo:

    ;extension=php_pdo_mysql.dll

    Quitamos el punto y coma dejndolo as

    Cdigo:

    extension=php_pdo_mysql.dll

    Luego debemos reiniciar Apache para que apliquen los cambios en los archivos de configuracin.

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    8

  • Curso: "Zend Framework 2" 2013 Probando nuestro servidor web

    Vamos a asegurarnos que todo est corriendo hasta ahora como

    corresponde. Entonces creamos un archivo index.php y aadir el siguiente contenido:

  • Curso: "Zend Framework 2" 2013 Antes de empezar, cmo funciona rpidamente un MVC

    El patrn MVC podra considerarse una "especializacin" de una tpica "arquitectura de 3 capas" pero con una lgica de funcionamiento ms ajustada a entornos web, donde se intenta -por lo general concentrar todas las peticiones del

    exterior a travs de un solo punto de entrada (clsicos sistemas "modulares")

    En este nuevo diseo tendremos que todas las peticiones del usuario se dirigirn hacia un Controller ("Controlador") que se encargar de decidir si solicita informacin de la "lgica de

    negocio" al Model ("Modelo") y/o pasa a la View ("Vista") para que se encargue de generar la interfaz de usuario.

    Nota: se recomienda la lectura de la explicacin escrita en Wikipedia

    Aqu se puede visualizar un diagrama que muestra la relacin con sus componentes (ms adelante entraremos en detalles, por ahora solo veremos lo bsico y esencial para entender el funcionamiento del patrn).

    Aclaracin importante: los patrones de diseo son "la mejor solucin encontrada para resolver un problema genrico y recurrente", pero, la solucin es una "gua" y no un

    "manual" para resolver un problema especfico, ya que cada contexto tendr sus

    particularidades. ZF2 "implementa su versin" del patrn de diseo, por lo tanto no significar nunca que lo que veamos de ZF2 es sinnimo puro de MVC, en realidad

    veremos que existen muchos frameworks que implementan su propia versin del

    patrn, y todas estarn correctas, unas mejores que otras, de hecho la implementacin

    MVC de ZF2 est completamente renovada desde cero respecto a la serie de ZF1.

    Un patrn de diseo es solo eso, una gua.

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    10

  • Curso: "Zend Framework 2" 2013

    Zend\MVC tiene una implementacin de MVC completamente nueva, diseado desde el principio por Zend Framework 2.0, rescrita completamente desde cero, con una arquitectura ms robusta, extensible y con mejor

    diseo que la primera versin de ZF1, con un importante

    enfoque en el rendimiento y flexibilidad.

    En tres palabras Performance, realmente rpido y optimizado.

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    11

  • Curso: "Zend Framework 2" 2013 Como obtener y buscar informacin Oficial de ZF2

    Unos de los principios que seguiremos en el del taller es el de leer y buscar informacin

    en la documentacin oficial de Zend Framework de la serie ZF2 Releases, cosa que la

    mayora es lo que menos hace, o lo deja como ltima instancia, cuando debiera ser

    todo lo contrario.

    Este principio es conocido como RTFM es un acrnimo que en ingls significa "Read

    The Fucking Manual" (Lee el Maldito Manual" en espaol), otra traduccin un poco ms

    educadas sera "Read The Fine Manual" o Lee el Buen Manual

    La documentacin se organiza en dos grandes puntos: el APIs y la Gua de Referencia:

    1. APIs: Si estamos buscando informacin sobre un mtodo particular, un atributo de alguna clase o bien no recordamos el nombre de una constante. Aqu

    podemos obtener toda la informacin y documentacin de las clases y

    componentes de Zend Framework 2 a unos pocos clic de distancia.

    2. Gua de Referencia o Manual: Con ms de 1000 pginas y sobre 500 ejemplos, tiene un sistema de bsqueda dentro del manual, contiene en detalle todos los

    Componentes de Zend Framework con una notable calidad en sus explicaciones

    y cdigos de ejemplo.

    3. Adems de contar con la documentacin de las APIs y de la Gua de Referencia de Zend Framework en el sitio de ZF con formato HTML, tenemos disponible como descarga la versin de pdf de la gua de

    referencia y la gua de estudio para la certificacin.

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    12

  • Curso: "Zend Framework 2" 2013 Estructura de una Aplicacin bajo Zend Framework 2

    Primero necesitaremos tener un directorio que representar nuestra aplicacin. Para

    este ejemplo usaremos el nombre proyecto-zf2, donde posteriormente deber tener una estructura estructura estndar definida por ZF2 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 una tpica aplicacin ZF2 sera la siguiente:

    proyecto-zf2/ config/ application.php autoload/ global.php local.php data/ module/ configs/ module.config.php src/ / Controller/ Model/ tests/ views/ / Module.php // etc. vendor/ public/ css/ images/ js/ .htaccess index.php

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    13

  • Curso: "Zend Framework 2" 2013 De la estructura de directorio anterior podemos observar lo siguiente:

    Primero que todo, tenemos al directorio config. Contiene la configuracin utilizada por Zend\ModuleManager para cargar las configuraciones de mdulos (application.config) y

    otras configuraciones (por ejemplo, la configuracin de base de datos y credenciales de

    acceso), que detallaremos ms adelante.

    Segundo, tenemos al directorio public. Este no solo guarda nuestro index.php quien se encarga de arrancar nuestra aplicacin, sino que adems podra contener archivos de imgenes, hojas de estilos css, javascript etc.

    Luego tenemos el directorio vendor, lugar donde guardamos nuestros propios componentes y libreras de terceros como Doctrine2 y las mismas de Zend Framework

    2.

    Luego no menos importante es el directorio de la aplicacin module. Este es considerado como el ms importante, ya que es donde creamos y guardamos nuestros

    mdulos con su aplicacin MVC, los controladores, modelo, vistas (script o plantillas y

    view helper) y archivos de configuracin.

    Finalmente dentro de cada mdulo adems de los directorios MVC, tendremos la

    carpeta tests, lugar donde llevaremos a cabo nuestras pruebas unitarias (testing). Esto puede ser usado generalmente para probar los modelos que deben contener la

    lgica de negocio y nuestros controladores.

    Podemos ver una estructura que probablemente se repetir en la mayora de los framework: los directorios controllers, models y views que veremos ms adelante que se encuentran dentro de module (los mdulos).

    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.

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    14

  • Curso: "Zend Framework 2" 2013 El directorio "public"

    El directorio public deber tener todos los archivos que pueden ser directamente

    accesibles desde nuestro servidor (archivos pblicos, que no nos debera afectar en

    nada si son bajados desde el exterior de forma annima), tales como el "bootstrap" (index.php), imgenes, css, js etc... y deber incluir su respectivo archivo .htaccess con las reglas de acceso. En esencia se busca que cualquier acceso a nuestra estructura sea redirigida a nuestro index.php para tener el control por un nico punto de

    acceso, a menos que digamos lo contrario, como sucede con las imgenes, css y js,

    que deben poder accederse de forma pblica o no funcionaran.

    Vamos a asumir que estamos corriendo sobre nuestra mquina local y que nuestro

    directorio public es accesible mediante la url: http://localhost/proyecto-zf2

    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: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    15

  • Curso: "Zend Framework 2" 2013 Instalando Zend Framework 2

    Ahora, con el fin de construir nuestra aplicacin con ZF2 Release debemos descargar el framework usando el instalador Zend Skeleton Application disponible en github.

    Nos vamos a la siguiente URL para descargar el Skeleton:

    https://github.com/zendframework/ZendSkeletonApplication

    hacemos un clic en el botn "Zip". Esto descargar un archivo con un nombre similar a zendframework-ZendSkeletonApplication-zf-release-2.0.2-2-geeca13.zip

    Luego se descomprime el archivo dentro del directorio web root (htdocs) donde tenemos nuestros proyectos en apache y renombramos el directorio resultante a proyecto-zf2.

    ZendSkeletonApplication est configurado para utilizar Compositor (http://getcomposer.org) para resolver las dependencias de los

    componentes o packages de ZF2. En este caso, la dependencia por defecto es Zend

    Framework 2 en s, completo.

    A pesar de que podemos descargar ZF2 Release "ltima versin 2.xx.x Full

    tar.gz" Desde el sitio oficial de Zend Framework y

    configurar todo a mano, es

    recomendable automatizar el

    proceso instalndolo con Zend Skeleton

    Application.

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    16

  • Curso: "Zend Framework 2" 2013 Luego una vez descomprimido y renombrado, para instalar Zend Framework 2 en

    nuestra aplicacin, en el terminal o CMD simplemente escribimos:

    php composer.phar self-update php composer.phar install Esto debera tomar un tiempo ya que descarga las libreras de ZF2:

    Para esto es necesario tener el ejecutable de PHP en la variable de entorno del

    sistema operativo PATH.

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    17

  • Curso: "Zend Framework 2" 2013 Tener acceso a los comandos desde consola En el caso de Windows, necesitamos tambin definir la ruta hacia PHP C:\xampp\php para que nos reconozca los comandos de pho, y para

    ello podemos agregar la ruta a travs de

    variables del sistema.

    Por lo general, en la mayora de las versiones de

    Windows recientes debemos ir a:

    Panel de Control > Sistema > Configuracin Avanzada y luego modificar las variables de ambiente y agregar las rutas en el path: C:\xampp\php (Luego de cambiarlo, debers reiniciar tu sistema para que tome las nuevas

    variables de ambiente).

    Instalacin Linux o usando cliente GitHub La manera ms fcil de empezar es ejecutando el

    comando git en la consola o terminal de Linux.

    El comando git esta disponible por defecto en el

    Kernel de Linux, nos permite versionar aplicaciones en

    repositorios, a pesar de que es un sistema propio de la

    plataforma LINUX tambin es posible usar la

    instalacin con Git en Windows y Mac, slo hay que

    instalar el cliente GitHub correspondiente (Windows y

    Mac).

    Git es un software de control de versiones diseado por Linus Torvalds, pensando en la eficiencia y la confiabilidad del mantenimiento de versiones de aplicaciones cuando estas tienen un gran nmero de archivos de cdigo fuente. Al principio, Git se pens como un motor de bajo nivel sobre el cual otros pudieran escribir la interfaz de usuario o front end como Cogito o StGIT. Sin embargo, Git se ha convertido desde entonces en un sistema de control de versiones con funcionalidad plena. Hay algunos proyectos de mucha relevancia que ya usan Git, en particular, el grupo de programacin del ncleo Linux.

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    18

  • Curso: "Zend Framework 2" 2013 Tenemos dos alternativas de instalacin con git una es Composer (forma recomendada

    por zend) y la otra es GIT.

    Usando Composer Simplemente clonamos con el comando clone el repositorio de

    ZendSkeletonApplication:

    prompt> git clone git://github.com/zendframework/ZendSkeletonApplication.git proyecto-zf2 A continuacin, ejecutamos el comando de instalacin para instalar las libreras de ZF2 y cualesquiera otras dependencias:

    prompt> php ./composer.phar install

    Usando GIT Simplemente clonamos con el comando clone el repositorio ZendSkeletonApplication

    usando la opcin --recursive, el cul tambin instala ZF2:

    prompt> git clone --recursive git://github.com/zendframework/ZendSkeletonApplication.git proyecto-zf2

    Si todo sale bien, entonces nos vamos al browser, escribimos la direccin:

    http://localhost/proyecto-zf2/public/ y deberamos ver algo como esto:

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    19

  • Curso: "Zend Framework 2" 2013

    Recordar: configuracin versus convencin, si respetamos las reglas de nombres el framework logra encontrar los componentes que tiene que ejecutar.

    Nuestro archivo .htaccess

    ZF est diseado implementando el patrn Front Controller: ste patrn se encarga

    de recibir y controlar todas las peticiones que vienen desde una URL (exterior), y segn

    estos parmetros de peticin direcciona hacia un mdulo y a un controlador especifico

    (de acuerdo a la informacin que definimos en la url), posteriormente llama a la accin

    deseada de nuestro controlador.

    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

    todas las peticiones a nuestro "bootstrap" (index.php) para luego a travs del

    FrontController decidir a qu controller derivar el control del sistema.

    Para el Servidor Web Apache se debe tener el archivo proyecto-zf2/public/.htaccess que viene ya implementado en ZendSkeletonApplication con el siguiente contenido:

    Cdigo:

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} -s [OR]

    RewriteCond %{REQUEST_FILENAME} -l [OR]

    RewriteCond %{REQUEST_FILENAME} -d

    RewriteRule ^.*$ - [NC,L]

    RewriteRule ^.*$ index.php [NC,L]

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    20

  • Curso: "Zend Framework 2" 2013 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 a partir de ZendSkeletonApplication 2. Con la estructura de directorios determinada por ZF2

    3. Estudiamos nuestro Bootstrap con su .htaccess

    4. Instalamos Zend 2 en el directorio library va comando Composer

    Estamos listos!

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    21

  • Curso: "Zend Framework 2" 2013 Mi primer Bootstrap

    Lo primero que tenemos que tener claro es cul es nuestro bootstrap y analizar nuestro

    index.php (que sera la puerta de entrada o Bootstraping) que ya viene creado y listo

    para arrancar nuestra aplicacin.

    Antes de empezar necesitamos tener un archivo .htaccess el cul se encuentra dentro

    de la carpeta public del proyecto. Debe contener el siguiente cdigo:

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

    A continuacin nuestro index.php (bootstrap) que lo encontraremos dentro de la

    carpeta public junto a nuestro .htaccess. Deber contener el siguiente cdigo:

  • Curso: "Zend Framework 2" 2013 Listo, esto es lo mnimo para funcionar:

    1. Por defecto queda definida donde est posicionado el sistema.

    2. Por defecto queda definida la ruta para encontrar la librera del ZF2.

    3. Requerimos el Application::init() con la configuracin.

    4. y definimos cual es la ruta donde se deben buscar los controllers (por defecto

    buscar un archivo con el nombre IndexController.php en el Mdulo Application e invocar el mtodo action indexAction())

    Nuestro Controlador por Defecto

    Debemos tener el archivo "IndexController.php " que se encuentra dentro del directorio

    "module\Application\src\Application\Controller " del proyecto y namespace de la aplicacin "namespace Application\Controller". Que contiene lo siguiente:

    namespace Application\Controller;

    use Zend\Mvc\Controller\AbstractActionController;

    use Zend\View\Model\ViewModel;

    class IndexController extends AbstractActionController

    {

    public function indexAction()

    {

    return new ViewModel();

    }

    }

    Lo que tenemos aqu es el controller por defecto, llamado IndexController y extiende de la clase AbstractActionController toda la estructura y funcionalidad base

    que debe contar un Controller de ZF2.

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    23

  • Curso: "Zend Framework 2" 2013 Nota Importante: Por lo general los controladores deben ir dentro del directorio "src//Controller" en el mdulo en cuestin.

    Continuando con el ejemplo, tenemos un mtodo action:

    public function indexAction() { return new ViewModel(); }

    Importante: Convencin de Nombres

    Aqu nos enfrentamos por primera vez a una convencin de nombres para una clase que cumple completamente con los estndares preestablecidos, por ejemplo AbstractActionController que es lo habitual y correcto (como en Java), a diferencia de ZF1 que nombraba las clases segn su estructura de directorio separado por underscore

    (guion bajo) donde define la ruta para llegar a ella, ahora con ZF2 ya no es necesario ya que se hace uso de los namespace en base al manejo de paquetes o espacios de nombres de PHP5.3 y los nombres de clase

    son simples y los correctos.

    Recomendamos como ejercicio empezar a conocer el cdigo de ZF2: busquen dentro del directorio vendor\zendframework y editen el cdigo fuente de AbstractActionController.php e investiguen un rato

    cmo est escrito, cmo funciona, el uso de PHPDoc, etc.

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    24

  • Curso: "Zend Framework 2" 2013 que contiene una sentencia que retorna un objeto que representa a la vista

    ViewModel, en otras palabras es el objeto que comunica el controlador con la vista, en

    ella podemos pasar los parmetros o atributos de la vistas y definir el nombre de la

    vista a cargar, los parmetros que asignemos posteriormente dentro de la vista los

    veremos cmo $this->titulo, como si fuera un atributo pblico de la vista.

    Para pasar atributos o datos a una vista, simplemente pasamos un arreglo asociativo

    con los parmetros, en el siguiente ejemplo pasando un ttulo:

    public function indexAction() { return new ViewModel(array('titulo' => 'Hola mundo',)); }

    Otra forma comn de pasar datos a la vista es retornar directamente un arreglo ( array()

    ) con los datos, internamente ZF2 crear el objeto ModelView y pasar los atributos por

    constructor.

    public function indexAction() { return new array('titulo' => 'Hola mundo',); }

    La sentencia render() se invoca en forma implcita e interna, es transparente para nosotros, por debajo se crear una instancia

    de la clase PhpRenderer que llamar al mtodo render que imprimir la vista en el stream

    de salida del navegador.

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    25

  • Curso: "Zend Framework 2" 2013 Por defecto el nombre de la vista que carga lleva el mismo nombre del mtodo action,

    por lo tanto si el mtodo se llama indexAction() buscar y cargar la vista index.phtml,

    por ejemplo si el action es holaMundoAction() buscara la vista hola-mundo.phtml.

    De todas formas este comportamiento por defecto se puede modificar y podemos

    especificar la vista que queramos y necesitemos cargar de forma explcita:

    public function indexAction() { // Creamos y retornamos un objeto view model con un atributo o dato titulo $view = new ViewModel(array('titulo' => 'Hola Mundo')); // buscar y cargar la vista titulo.phtml // ubicada dentro del mdulo y controlador especificado (application/index) $view->setTemplate('application/index/titulo'); return $view; } Cuando retornamos la instancia de ViewModel, la capa de la vista View Manager (a travs del componente ViewRenderer por defecto la implemntacin PhpRenderer),

    usar este objeto para dibujar o invocar el render de la vista asignando las variables y el nombre del template o paltilla phtml. Por defecto, podemos omitir el nombre del

    template, y este ser resuelto automticamente por el componente View Resolver, de la forma: lowercase-nombre-controlador/lowercase-nombre-accion. Sin embargo, cmo mencionamos ms arriba en el ejemplo podemos sobrescribir y cambiar el

    nombre de la vista o template invocando el mtodo setTemplate() del objeto

    ViewModel.

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    26

  • Curso: "Zend Framework 2" 2013 Nuestra vista index.phtml

    Ahora solo nos queda estudiar el archivo de vista con extensin .phtml (estndar definido por Zend). Observamos un archivo de nombre index.phtml que lo encontramos dentro de la carpeta module\Application\view\application\index.

    Siguiendo las "convenciones", siempre necesitamos tener para la vista un directorio que se llame igual que el controller. En este caso tenemos una carpeta llamada "index", igual que el controller IndexController.php.

    Dentro del archivo de vista index.phtml observamos el siguiente cdigo por defecto:

  • Curso: "Zend Framework 2" 2013 Ahora, como ejercicio vamos a modificar el mtodo indexAction() del controlador

    IndexController para pasar el dato del ttulo a la vista:

    public function indexAction() { return new ViewModel(array('titulo' => 'Hola mundo',)); }

    Nada nuevo! luego modificamos nuestra vista por defecto

    con el siguiente contenido:

    Hola Mundo con Zend Framework 2! :-)

    Si hicimos todo correctamente, lo probamos escribiendo la

    siguiente direccin en el navegador:

    http://localhost/proyecto-zf2/public/

    Felicitaciones!, hemos terminado nuestro primer ejemplo con Zend Framework 2 Hola Mundo!.

    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

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    28

  • Curso: "Zend Framework 2" 2013 Para que todo lo anterior funcione correctamente, debemos tener configurado en el

    archivo "module.config.php" (dentro del directorio "config") los mapeos correspondientes (que veremos en detalle ms adelante), es decir primero configurar el

    Controlador y luego mapear est a una determinada URL o Routing, aunque ya lo

    tenemos listo y configurado en nuestro proyecto de ejemplo para el IndexController del

    mdulo Application.

    Lo ms importante a tener en cuenta es indicarle a ZF2 que tenemos un controlador en el mdulo correspondiente, en nuestro caso "Application" (lo pueden revisar en el archivo module.config.php):

    'controllers' => array( 'invokables' => array( Application\Controller\Index => Application\Controller\IndexController', ), ), Indicando un nombre "Application\Controller\Index" y el namespace (PHP 5.3) de la clase controladora "Application\Controller\IndexController".

    El parmetro invokables socia un arreglo, por lo tanto si necesitamos crear ms controladores, simplemente se configuran agregndolos en el array (como una lista de

    controllers de nuestro mdulo).

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    29

  • Curso: "Zend Framework 2" 2013 En resumen

    En este ejemplo logramos recibir una peticin del exterior a travs de la url /proyecto-

    zf2/public/, que gracias al bootstrap redirigi el control al controller por defecto

    IndexController, y este le pas los datos necesarios a la vista, y esta, se encarg de visualizar el valor recibido como si fuera un atributo propio (creado dinmicamente).

    Tarea: Intenta seguir todos estos pasos y cumplir con este ejemplo, si tienes dudas o problemas, enva una consulta al foro.

    Posteriormente, antes de terminar la semana, recibirs una tarea desafo relacionada con los temas vistos en este mdulo!

    Fin.

    Enva tus consultas a los foros! Aqu es cuando debes sacarte todas las dudas haciendo consultas en los foros correspondientes

    AUTOR: Andrs Guzmn Fontecilla. Email: [email protected] WEB: http://www.bolsadeideas.cl/servicios/cursos-de-capacitacion/ LICENCIA: http://creativecommons.org/licenses/by-nc/2.5

    30

    IntroduccinObjetivosRequerimientos MnimosPrimera configuracinSi nuestro entorno es WindowsConfiguracin BaseLuego debemos reiniciar Apache para que apliquen los cambios en los archivos de configuracin.

    Probando nuestro servidor webAhora 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.Ey! Se olvidaron de colocar el ?>! (jejeje, tontos, los atrapamos!)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 cara...

    Antes de empezar, cmo funciona rpidamente un MVCEn tres palabras Performance, realmente rpido y optimizado.Como obtener y buscar informacin Oficial de ZF2Unos de los principios que seguiremos en el del taller es el de leer y buscar informacin en la documentacin oficial de Zend Framework de la serie ZF2 Releases, cosa que la mayora es lo que menos hace, o lo deja como ltima instancia, cuando debiera...Este principio es conocido como RTFM es un acrnimo que en ingls significa "Read The Fucking Manual" (Lee el Maldito Manual" en espaol), otra traduccin un poco ms educadas sera "Read The Fine Manual" o Lee el Buen Manual (La documentacin se organiza en dos grandes puntos: el APIs y la Gua de Referencia:1. APIs: Si estamos buscando informacin sobre un mtodo particular, un atributo de alguna clase o bien no recordamos el nombre de una constante. Aqu podemos obtener toda la informacin y documentacin de las clases y componentes de Zend Framework 2 ...2. Gua de Referencia o Manual: Con ms de 1000 pginas y sobre 500 ejemplos, tiene un sistema de bsqueda dentro del manual, contiene en detalle todos los Componentes de Zend Framework con una notable calidad en sus explicaciones y cdigos de ejemplo.3. Adems de contar con la documentacin de las APIs y de la Gua de Referencia de Zend Framework en el sitio de ZF con formato HTML, tenemos disponible como descarga la versin de pdf de la gua de referencia y la gua de estudio para la certificac...

    Estructura de una Aplicacin bajo Zend Framework 2El directorio "public"Instalando Zend Framework 2Tener acceso a los comandos desde consola

    Instalacin Linux o usando cliente GitHubUsando ComposerUsando GITNuestro archivo .htaccess

    RepasemosMi primer BootstrapNuestro Controlador por DefectoNuestra vista index.phtmlEn resumenEnva tus consultas a los foros!