Introduccion a Zend Framework

p>Zend Framework o mas conocido como ZF es un Framework Open Source que sirve para desarrollar proyectos, aplicaciones y servicios web con PHP 5 y tiene buen rendimiento en aplicaciones MVC.
ZF esta desarrollado 100% Orientado a Objetos aprovechando al máximo la potencia de PHP5.

La arquitectura de este Framework se basa en componentes los cuales fueron diseñados con tanta flexibilidad que nos permite a los desarrolladores usar los componentes individualmente (use-at-will).

ZF posee muchos componentes y al descargarlos es recomendable descartar los que no vamos a usar en nuestro proyecto.
El principal patrocinador de ZF es Zend Technologies quien además difunde el estandar oficial para PHP, es como Sun para Java.

Para entender mas de la arquitectura MVC pueden leer este POST detallado.
MVC en PHP.

Requerimientos

Necesita PHP 5.2.4+, puede ejecutarse en cualquier plataforma(Linux, Macintosh, Windows), pero si queremos instalar la ultima versión de Apache, PHP y MySQL podemos instalar el entorno XAMPP que es multiplataforma y muy sencilla la configuración.

Luego necesitamos editar el http.conf y activar el mod_rewrite(Mas información).

LoadModule rewrite_module modules/mod_rewrite.so

Zend Framework trabaja con conexiones PDO que son mas seguras que los drivers de MySQL, así que necesitaremos editar el PHP.ini y activar estas extensiones que sirve para la conexion a la BD.

extension=php_pdo.dll
extension=php_pdo_mysql.dll

Para información detallada de requerimientos avanzados Zend Framework Appendix.

Instalación

La instalación es simple, primero elija la versión estable mas reciente de Zend Framework(en este caso es la 1.8) Zend Framework Downloads.

Luego elija el paquete preferido:

Full Pack es el paquete con los demos, test, Dojo Toolkit y mas.
Min Pack es el paquete con todo lo necesario para crear un proyecto.

Despues elijes que formato de compresion es la adecuada para usted(.zip, .rar, .tar.gz). Al momento de descargarlo y descromprimirlo encontraremos una carpeta llamada “library” la cual usaremos en nuestros Proyectos.

Nota: La carpeta /library guardara las funciones clases y demas librerías para nuestro proyecto, dentro de la carpeta Zend no se debera poner ni modificar nada ya que de ser actualizado a una nueva versión de Framework perderán su compatibilidad o eliminaran los cambios que han echo.

Estructura del Proyecto

Para comenzar con Zend Framework desarrollaremos una arquitectura simple con una carpeta “app”, “html” y “lib” las cuales explicare a continuación:

app: Esta carpeta contendrá toda la lógica de negocios del proyecto, controladores, acciones, vistas, helpers, archivos de configuración.

html: Aquí alojaremos un archivo index.php el cual interpretara las peticiones del usuario consultando los controladores y devolviendo las vistas correspondientes, de esta manera se manejara toda la web desde un solo punto.
Esta carpeta también sirve como deposito de archivos javascript, hojas de estilo, imagenes, etc que dependan de la web.

lib: Esta carpeta sirve como capa de abstracción de datos, acceso a base de datos y para alojar el Zend Framework.

Esta es una estructura básica de aplicación utilizando Zend Framework.

MyProyect/
	app/
	  controllers/
	    IndexController.php
	  views/
	    scripts/
		  index/
		    index.phtml
	html/
	  index.php
	  .htaccess
	lib/
	  Zend/

Ahora comenzamos creando el archivo .htaccess, este archivo contiene una serie de directivas para el servidor. Esta vez lo usaremos para poner el mod_rewrite mediante este archivo, establecemos una regla de cuales archivos tiene que leer directamente y sino reflejarla mediante el index.php.

RewriteEngine on
RewriteRule !.(js|ico|txt|gif|jpg|png|css)$ index.php

Comenzaremos explicando IndexController.php, se llama así porque debemos respetar una nomenclatura dictada por la compañía Zend y de esta forma estandarizar nuestros proyectos y archivos.
Zend Framework Coding Standard.

IndexController.php (controlador)

class IndexController extends Zend_Controller_Action
{
    public function indexAction()
    {
        $this->view->bienvenido = 'Zend Framework MVC!';
    }
}

Este sera el archivo de la vista donde pintaremos la variable bienvenido que pasa del Controller al View.

index.phtml (vista)

<body>
  <?php echo $this->bienvenido; ?>
</body>

Para finalizar y que todo funcione correctamente hay que modificar el archivo index.php que esta en la carpeta html, ya que siempre se hara las peticiones a ese archivo el cual se encargara de elejir el controlador y la vista correspondiente.

index.php (core)

error_reporting(E_ALL);
$rootPath = dirname(dirname(__FILE__));
set_include_path(get_include_path() . PATH_SEPARATOR .
$rootPath . '/lib' . PATH_SEPARATOR);

/** Incluimos Zend_Controller_Front */
require_once 'Zend/Controller/Front.php';
Zend_Controller_Front::run($rootPath . '/app/controllers');

Primero habilitamos los errores para el modo desarrollo, luego llamamos al metodo run que ejecutara la acción correspondiente.

Hasta aquí tenemos un concepto y un ejemplo practico de como trabaja ZendFramework, estare preparando algunos tutoriales productivos para desarrollo con este Framework.
Alguna sugerencia o duda con gusto respondere.

Les dejo un link a los Screencasts que son muy buenos para comenzar con ZendFramework.

Ver Screencasts

También te puede interesar

9 Comments

  1. jose
    jun 21, 2009 @ 01:39:55

    Gracias por este mini tutorial.. no habia encontrado un sitio en español que explicara tan claro, de como trabajar con ZF desde cero.

    Espero que siga creciendo este tutorial.. con mas ejemplos

    un saludo

  2. Rafa
    sep 24, 2009 @ 10:52:21

    Hola, la verdad es que est´muy bien explicado el funcionamiento de ZF (es menos farragoso que en otros posts), pero en mi caso, estoy comenzando con el tema de frameworks, no me quedan claras algunas cosas:

    - ¿en tu nuevo directorio /lib creo que debes copiar los ficheros de las clases de ZF, no? Esos ficheros se encuentran en el directorio /ZFComoSeLlame/librery/Zend/ Mi duda es si se copian los ficheros de dentro del directorio /Zend o tambien debe copiarse el directorio /Zend dentro de /lib. Es decir, ¿tu directorio /lib quedaría /lib/Zend/ZFClasesAMontones o /lib/ZFClasesAMontones?

    - ¿Porque situas index.phtml tan escondido? Es decir, no sería mejor tenerlo en views/index.phtml?

    Haciendo estas cosas, personalmente he cargado la direccion de mi proyecto http://localhost/ZFProyecto/html/ y se muestra el contenido de index.php, es decir, muestra el código fuente y no el mensaje de Bienvenida…¿podrías ayudarme a entender cómo comenzar a hacer uncionar ZF?

    Muchas gracias de antemano y lo dicho, muy buen post (sobretodo si logro solucionar las dudas que he planteado).

    • craftyman
      sep 24, 2009 @ 11:39:46

      Hola Rafa,

      Respondiendo tus preguntas:

      ¿en tu nuevo directorio /lib creo que debes copiar los ficheros de las clases de ZF, no?
      Claro, las carpetas tienen que estar de esta manera:

      /lib
      /Zend
      /Zend_ClasesMontones
      /…
      /OtrasClases
      /…

      Como ZendFramework no tiene todo aveces, necesitamos poner nuestras propias clases, esta es una manera para no combinar clases externas con las de Zend.

      ¿Porque situas index.phtml tan escondido? Es decir, no sería mejor tenerlo en views/index.phtml?

      Lo pongo hay porque dentro de scripts los .phtml deben estar agrupados segun su controlador, en este ejemplo parece que no fuera necesario, pero al momento de crear mas acciones si deberia, ejemplo:

      controllers/
      IndexController.php
      AdminController.php
      views/
      scripts/
      index/
      index.phtml
      galeria.phtml
      videos.phtml
      admin/
      index.phtml
      galeria.phtml
      videos.phtml

      Un controlador es index, y el otro admin, pero los dos pueden tener las mismas acciones, uno para el frontend y otro para el backend.

      se muestra el contenido de index.php, es decir, muestra el código fuente
      esto no deberia pasar ya que php procesa lo que esta dentro de un contenedor <?php, y si muestra el código algo anda mal con la apertura de PHP.

      Espero haber aclarado algunas dudas, te dejo este link donde explica detalladamente el funcionamiento de ZendFramework

      http://www.slideshare.net/DragonBe/introduction-to-zend-framework

      Saludos.

  3. Rafa
    sep 24, 2009 @ 16:08:31

    Hola de nuevo craftyman, al final funcionó. Resulta que al “copiar” el código php lo hice sin “” en IndexController.php e index.php (si quieres modifica el post incluyéndolos por si alguien copia y pega sin darse cuenta de ello). Cuando hice esto obtuve un error super largo, pero me dí cuenta de que no había creado un la ruta /app/views/script/index/index.php sino esta otra /app/views/script/index.php.

    Bueno, ya no posteo más, sólo lo menciono por si pasa alguien por aquí que tiene algún problema similar (pues ya está, aquí la solución).

    Un saludo y lo dicho. Lo bueno si breve dos veces bueno = Muy buen post (y una gran ayuda tus comentarios y respuestas).

  4. Brett Kromkamp
    oct 03, 2009 @ 04:43:33

    He desarrollado mi propio sitio web basado en mapas de topicos con el Zend Framework: http://www.quesucede.com. El motor de mapa de topicos tambien está implementado con PHP. La experiencia de desarrollar un sitio web con el Zend Framework fue muy productivo.

  5. webmaster gde
    oct 21, 2009 @ 11:29:34

    Muy buen titorial, me saco de apuros con el ZF, a muchos les falta aclarar algunos puntos para iniciar a trabajar, por ejemplo el de las extenciones de php…

  6. jpg
    ene 21, 2010 @ 10:17:19

    este tutotrial ya lo vi en otro lugar

  7. Hero
    may 22, 2011 @ 02:16:51

    Esto es Zend ? que complicada la nota, creo que cuando lei sobre Frameworks el objetivo de estas era facilitar la tarea del programador o hacer mucho mas facil el desarrollo de sitios Web utilizando tales herramientas pero a este Zend lo veo terriblemente complicado.

  8. Información de Zend Framework « Tecnologías de la Información
    oct 28, 2011 @ 00:15:11