lunes, diciembre 16, 2013

Curso de Zend Framework 2 - Capítulo I (Configuración del Entorno LAMP)

1.- Introducción
Zend framework 2 es el framework de los creadores del núcleo de PHP (Zend); la versión 2 de este popular framework refleja los cambios introducidos en PHP 5.3 como son los espacios de nombres (namespaces), closures y un mejor uso de la Programación Orientada a Objetos; así como de los patrones de diseño.
El objetivo de Zend Framework 2 es apoyar al programador en el desarrollo de aplicaciones web empresariales y complejas.
Zend Framework 2 puede ser usado para el desarrollo de aplicaciones de cualquier tamaño; por tanto su uso no es tan sencillo como otros frameworks; como Code Igniter o Cake PHP. Zend Framework 2 fue publicado en setiembre de este año y en el corto periodo que tiene ha generado gran espectativa en la comunidad de desarrolladores de PHP y de aquellos que han estado trabajando con ZendFramework.

2.- Características Nuevas
Zend Framework 2 fue desarrollado con la idea de mejorar el framework; adaptándolo a la evolución del lenguaje y tomando las mejores ideas de los frameworks de desarrollo; el resultado fue un framework moderno y muy fexible que brinda al programador característica muy importantes para el desarrollo de aplicaciones empresariales. Las principales novedades de Zend 2 respecto a la versión anterior son las siguientes:
- Desarrollo basado en Pruebas Unitarias con PHPUnit
- Un nuevo sistema de módulos para organizar el código
- Una nueva arquitectura basada en servicios mediante Inyección de Dependencias
- Un gestor de eventos para olvidarse de los hooks y poder ejecutar código propio en cualquier punto de la ejecución de las aplicaciones

3.- Instalación de Zend Framework 

3.1.- Pre Requisitos
Zend Framework 2 requiere una adecuada compresión y uso de la Programación Orientada a Objetos de PHP, así como de Apache; en cuanto al uso de VirtualHost, mod_rewrite, y los archivos .htaccess; y del manejo de un servidor de base de datos (MySQL). Con la finalidad de comprender un entorno de desarrollo profesional; aparte de los requisitos mencionados, usaremos Ubuntu Linux como Sistema Operativo para el servidor y desplegaremos el primer hola mundo en el Framework.

3.2.- Instalación de Ubuntu Linux
Podemos instalar Ubuntu Linux de manera física en una máquina virtual; para quienes tengan instalada una máquina física con Ubuntu pueden obviar este paso y para quienes solo tengan Windows, pueden instalarlo fácilmente con Virtualbox

3.2.1.- Instalación de VirtualBox 
Descargamos VirtualBox para widows de http://www.virtualbox.org y lo instalamos  

3.2.2.- Instalación de Ubuntu Linux en una Máquina Virtual de VirtualBox
  • Le damos click al icono de Nueva y le damos nombre a la máquina virtual "Ubuntu LAMP Server", se va seleccionar  Tipo: Linux Versión: Ubuntu
  • Seleccionamos 1024MB de RAM para la nueva máquina Virtual
  • Creamos una nueva unidad de disco duro de y seleccionamos "Crear un disco Virtual Ahora" - Tipo de unidad de disco duro: VDI - Reservado Dinámicamente - Ubicación y Tamaño por defecto se guarda en la carpeta VirtualBox VMs en la carpeta del usuario; - tamaño 6GB - Crear
  • Ahora le damos click en Configuración - Seleccionamos Red y elejimos Adaptador Puente Nombre: Poner la tarjeta de Red - Dar click en Almacenamiento y donde dice a la derecha Unidad CD/DVD dar click al ícono de CD y seleccionar la unidad de CD donde está el disco instalador de Ubuntu; tambien se puede seleccionar el archivo iso; luego dar clik en Aceptar - Dar click en la flecha verde "Iniciar" para arrancar la máquina virtual
  • Ahora iniciará el CD de Ubuntu; despues de un momento nos saldrá un diálogo para - elegir el idioma y a la izquierda le damos click en "Instalar Ubuntu", le damos
    - click en "Continuar"
    - Borrar el disco e Instalar Ubuntu
    - Instalar Ahora
    - Donde se Encuentra "Lima"
    - Distribución del Teclado "Español Latinoamericano"
    - ¿Quién es Usted?
    Su nombre: alumno
    El nombre de su equipo: serverlamp
    Nombre de usuario: alumno
    Contraseña: alumno
    Confirme su Contraseña: alumno
    Al final de la instalación nos pide Reiniciar
Notas:
        - Podemos hacer la instalación con la pantalla completa
        - Para sacar el puntero del mouse de la máquina virtual, presionar el ctrl de la derecha
        - Si se demora en "Descargar fichero" o en "Descargar paquetes de idioma" dar click en la flecha de despliegue y luego "skip"

3.2.3.- Configuracion de la Red
Para nuestro curso usaremos una red hipotética 192.168.1.0/24 con asignación de IP de nuestro equipo linux 192.168.1.10, router 192.168.1.1 y DNS 8.8.8.8

- Dar click a las flechas opuestas que está en la barra superior y elegir "Editar las conexiones"
- Seleccionar Conexión Cableada 1 y click en Editar
- Pestaña "Ajustes Ipv4"
- Método manual
- click en añadir:
                      Dirección: 192.168.1.10
                      Mascara de Red: 24
                      Puerta de Enlace: 192.168.1.1
                      Servidores DNS: 8.8.8.8
                      Guardar y Cerrar.

3.3.- Instalación de SSH, Apache, PHP y MySQL
- Dar click en el icono Ubuntu y escribir en la barra de comandos terminal
- La terminal de Linux nos permite ejecutar comandos para administrar el sistema operativo; al abrir la terminal iniciamos con el usuario alumno

- Para loguearnos como root (el superusuario de Linux) ejecutamos:  
$> sudo su - 

clave: alumno

- Actualizamos la lista de paquetes instalables
$> apt-get update 

- Ahora instalamos el servidor SSH para poder administrar remotamente nuestro servidor
$> apt-get -y install ssh 

- Ahora para probar la conexión desde windows descargamos el programa putty
     http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
     
     descargar el archivo putty.exe, ejecutarlo y conectarse al IP del 
     servidor linux
usar el usuario: alumno clave: alumno

3.3.1.- Instalación de PHP, MySQL y Apache (Entorno de Desarrollo)
$> sudo su -
$> apt-get update
$> apt-get install php5 apache2 php5-cli \
php5-xdebug php5-mysql mysql-server \
php5-mcrypt php5-gd php5-memcache php-pear        
        
     Reiniciamos apache
$> /etc/init.d/apache2 restart
Nos pide una contraseña para el root de Mysql
     clave: alumno
desde windows abrir el navegador y entrar a la IP del servidor

3.4.- Comandos básicos para trabajar con archivos y directorios
En linux existe solo un directorio princiapl raiz / y en el cual se encuentran todos los demas directorios, Ej: el DOCUMENT_ROOT (raiz de pàginas web) se encuentra en /var/www la base de datos se encuentra en /var/lib/mysql los archivos de configuración de apache se encuentran en /etc/apache2 Nos logueamos como root
$> sudo su -

Comando cd

Nos sirve para movernos por los directorios Ej:
$> cd /var/www
$> cd /etc/apache2
$> cd conf.d

Comando pwd

Nos dice en que directorio nos encontramos Ej:
$> cd /var/www
$> cd pwd 

Comando ls

Nos sirve para listar los archivos y directorios
Ej:
$> cd /var/www
$> ls

- Listar en columnas y detalles

Ej:

$> ls -l       (lista el directorio actual)
$> ls -l /     (lista los directorios del raiz)
$> ls /etc/apache2/conf.d  (lista el directorio /etc/apache2/conf.d )

Comando mkdir

Nos sirve para crear directorios
Ej:
$> cd /var/www
$> mkdir images
$> mkdir js
$> mkdir css

Comando nano
nano es un editor sencillo para crear archivos
Ej:
$> cd /var/www
$> nano index.php
<?php
    echo "<h1>hola mundo</h1>";
    ?>
ctrl + o --> grabar ctrl + x --> salir Desde windows entrar a la IP del servidor con el navegador http://192.168.1.10

Comando cp

Nos sirve para crear archivos y directorios
Ej:
$> cd /var/www

$> cp index.php saludo.php  (copia un archivo)
Desde windows entrar a la IP del servidor con el navegador http://192.168.1.10/saludo.php
$> cp -R images imagenes   (copia un directorio)
$> ls -l /var/www

Comando mv

Nos sirve para renombrar y mover archivos y directorios
Ej:
$> cd /var/www
$> mv js javascript  (renombrando el directorio js a javascript)
$> ls 
$> mkdir banners
$> mv banners images/ (moviendo el directorio banners a images) 

3.5 El editor vim

El editor vim es el editor más común en las plataformas unix; su resaltado de syntaxis nos ayuda con los archivos de configuración
Comandos del Editor VIM
 
    ESC              : ingresa al modo comando
    i              : entra en modo insercion desde la misma linea
    o              : entra en modo insercion desde la sgte linea 
    1G              : va a la primera linea
    23G              : va a la linea 23
    :45              : va a la linea 45
    G                            : va a la ultima linea
    /palabra                    : busca una cadena
    n              : sigue buscando
    dd              : corta o borra una linea
    d8d              : corta o borra 8 lineas
    yy              : copia una linea
    y7y              : copia 7 lineas
    p              : pega el contenido del portapapel
    5p              : pega 5 veces el contenido del portapapel
    u              : deshace la ultima accion
    ctrl+r             : rehace la ultima accion
    x              : borra una letra
    :w              : graba el archivo actual
    :wq              : graba y sale
    :w!              : graba de forma forzada
    :wq!             : graba y sale forzadamente
    :q!                    : sale forzadamente
    :1,$s/busqueda/reemplaza/g     :busca una cadena y la reemplaza
    :! comando                    : ejecuta un comando en bash y vuelve a VIM
    :e archivo                    : abre un nueva archivo en el sgte buffer
    :b1              : va el primer buffer abierto
    :b2              : va al segundo buffer, para cambiar de buffer hay que grabar el buffer actual   
    :set number                    : muestra los numeros de linea
    :set nonumber            : quita los numeros de linea
    :set paste                    : habilita el pegado sin auto identificacion
    :set ts=3                    : establece a 3 los espacios de los tabs
    Insertar                       : entra en modo de reemplazo
    :saveas archivo                : guarda como nombre archivo
    :shitf+a                     : entra en modo insercion al final dpel
    D       : elimina texto desde el cursor actual hasta el final de la linea
    dG       : elimina todo hasta la ultima linea
    :wq! ++utf8 : guarda el fichero en modo UTFP (por defecto)
    :nohl   : cancela los resultados de busqueda

Instalación de  VIM

$> sudo su -
$> apt-get -y install vim

Ejercicio 1: Crear archivo poema
$> vim poema
i -----> Inserta texto
Oh gran Linux que quita la ignorancia en mi vida,
a ti te consagro mi aprendizaje.
ESC ----> Lleva al modo comando
:wq ----> graba y sale

$> cat poema 

Gestion de temporales de vim

$> vim poema   (agregar al final)
G  ----> van a la última línea
o  ----> modo inserción en una nueva línea
Prometo alejarme del maligno windows


Cerrar a la mala dando click en la X de la ventana del terminal

$> vim poema
Sale el mensaje de alerta el temporal y puede elegir entre estas opciones
[A]brir para lectura únicamente, (E)ditar de todas formas, (R)ecuperar, (B)orrar(S)alir, (A)bortar:

Seleccionamos "r" y le damos enter
i    -----> insetar texto
desde mañana
ESC  -----> volver al modo comando
:wq! -----> grabar y salir forzadamente


Borrar el temporal
$> rm -f .poema.swp

Ejercicio2:
Crear archivo saludo y ejecutar ejercicios de comandos vim
    $> vim saludo
        i 
        hola mundo
 ESC
 yy
 20p
 G
 o
 windows es lo maximo
 ESC
 /hola
 n
 n
 :set number
 G
 yy
 30p
 :1,$s/windows/linux/g
 dd
        45G
 d2d
 dG
 u
 ctrl+R  
 :! date
 :w
 :e otrosaludo
 :b1
 1G
 yG
 :b2
 p
 :wq!

$> cat saludo  (muestra el contenido del archivo)

$> cat otrosaludo

Archivo de configuracion de VIM
$> vim  /etc/vim/vimrc
   36G   ---> ir a la linea 36
              borrar la comilla inicial de las siguientes 3 lineas de la 36 a la 38
   G     ---> ir a la última línea
   o
   set nobackup
   set number
   set ts=4
   set paste
   ESC :wq

$> vim /etc/vim/vimrc
   ESC:q

4.- Instalación de ZendFramework 2
Una vez que ya tenemos nuestro entorno LAMP, vamos a configurar un primer proyecto con Zend Framework 2

4.1.- Prerequisitos  
    1.- Primero necesitamos habilitar el módulo mod_rewrite en Apache y permitir el uso de .htaccess en los directorios
    2.- Instalar composer
    3.- Crear el proyecto de Zend Framework 2 con Composer

 4.1.1 .- Habilitando mod_rewrite en Apache
   $> sudo su -
   $> cd /etc/apache2/mods-enabled
   $> ln -s ../mods-available/rewrite.load
   $> /etc/init.d/apache2 restart

4.1.2.- Instalando Composer (Gestor de dependencias de librerías)
   $> sudo su -

   Primero instalamos curl (comando para descargar archivos)
   $> apt-get install curl        

   Ahora instalaremos git  (sistema de control de versiones distribuido)
   $> apt-get install git

   Descargamos composer y lo movemos al /usr/bin para ejecutarlo en cualquier directorio
   $> curl -s https://getcomposer.org/installer | php --
   $> mv composer.phar /usr/bin
   
   Nota: si nos sale un mensaje de warning de timezone en php

   $> vim /etc/php5/cli/php.ini       (archivo de configuración para consola)
   960: date.timezone = America/Lima 
 
   $> vim /etc/php5/apache2/php.ini   (archivo de configuración para web)
   960: date.timezone = America/Lima
 
4.1.3 .- Creando el proyecto de Zend Framework 2
Con composer crearemos el proyecto zftest en el directorio /var/www/zftest
Esto nos creará el proyecto y nos descargará el ZendFramework2
   
$> composer.phar create-project -s dev \
--repository-url="http://packages.zendframework.com" \
zendframework/skeleton-application /var/www/zftest

4.l.4.- Editando el VirtualHost
para hacer que el directorio /var/www/zftest/public sea el raíz
Reemplazamos todo el contenido existente
$> vim /etc/apache2/sites-enabled/000-default
<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/zftest/public               
  <Directory />
    Options FollowSymLinks
    AllowOverride None
  </Directory>
  <Directory /var/www/zftest/public>               
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All                         
    Order allow,deny
    allow from all
  </Directory>

  ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
  <Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
  </Directory>

  ErrorLog ${APACHE_LOG_DIR}/error.log

  # Possible values include: debug, info, notice, warn, error, crit,
  # alert, emerg.
  LogLevel warn
  CustomLog ${APACHE_LOG_DIR}/access.log combined

  Alias /doc/ "/usr/share/doc/"
  <Directory "/usr/share/doc/">
      Options Indexes MultiViews FollowSymLinks
      AllowOverride None
      Order deny,allow
      Deny from all
      Allow from 127.0.0.0/255.0.0.0 ::1/128
  </Directory>
</VirtualHost>

Ahora reiniciamos apache y accedemos al proyecto desde el navegador http://localhost
    $> /etc/init.d/apache2 restart

Para verificar que el archivo .htaccess está funcionando, navegamos a http://localhost/loquesea y debería saler un error 404 con el logo de ZF

Finalmente editaremos la vista del Módulo Application, Controlador Index, Action Index
Reemplazando todo el contenido
  
    $> vim /var/www/zftest/module/Application/view/application/index/index.phtml
                                      
    <h1> Hola Mundo desde Zend Framework 2 </h1>                                  
Entramos con el navegador a http://localhost   y veremos el mensaje del hola mundo

5.- Herramienta de Depuración de PHP

Xdebug es una extensión para depurar errores en php, para poder configurarlo
instalamos la extensión php5-xdebug

$> apt-get install php5-xdebug

Activamos Xdebug (verificar la carpeta donde se encuentra la extension xdebug.so)
$> vim /etc/php5/conf.d/xdebug.ini
xdebug.ion=/usr/lib/php5/20100525/xdebug.so
xdebug.remote_enable=1
xdebug.remote_host="127.0.0.1"
xdebug.remote_port=9000
xdebug.remote_handler="dbgp"
xdebug.remote_mode=req
xdebug.profiler_enable=1
xdebug.profiler_output_dir="/tmp/xprofile/"
xdebug.collect_params=On
xdebug.show_local_vars=On


Activamos la visualización de error en formato html para poder depurarlos efectivamente

$> vim /etc/php5/apache2/php.ini
display_errors=On
html_errors = On

$> vim /etc/php5/cli/php.ini
display_errors=On

$> /etc/init.d/apache2 restart

No hay comentarios.: