Empezando con Zend Frameworks.
El otro día me encontré con una persona que se resistía a usa frameworks por el alto costo de aprendizaje que estos requerían. Si bien tiene cierto costo de aprendizaje, ese costo a mediano plazo es totalmente redituable. Esto lo digo porque varias veces he leído por ahí, gente buscando alguna librería para que maneje la conexion a la base de datos, otra para hacer un paginador, otra para el manejo del access controll list (ACL), entre otras; y lo que nos da este framework, es una solución para los problemas mas comunes, así evitamos rompernos la cabeza buscando la mejor solución, porque esto ya lo tenemos en Zend Framework. Si analizamos esto, aprender a implementar una solución, es muchisimo mas fácil que crearla, y este es el costo de aprendizaje de Zend Framework. Por esto, voy a tratar de explicar de la mejor manera como empezar a trabajar con un proyecto hecho enteramente en Zend Framework, aprovechando todos sus componentes a la medida que lo necesitemos.
1- Estructura de directorios.
Lo primero que necesitamos hacer es definir nuestra estructura básica de directorios. Nuestra estructura tiene que tener una carpeta donde podamos guardar nuestros archivos de acceso publico, como css, jpeg, avi, swf, etc. Esa carpeta en nuestro caso se va a llamar html/, la cual contendrá una carpeta css/, otra images/ y por ultimo una carpeta js/ por ahora.
Esta carpeta también contendrá nuestro bootstrap, el cual se va a encargar de llamar al modulo que corresponda, y otros menesteres.
Necesitamos una carpeta para nuestros componentes y los de Zend Framework, y para eso vamos a usar library/. Dentro de la carpeta library vamos a tener una carpeta Me/ y otra Zend/, en la primera por ahora no vamos a tener nada pero la idea es que cada componente que propio, lo colguemos en esa carpeta, Zend/ contendrá los componentes de Zend Framework.
Los módulos de nuestros sistemas van a estar compuestos de tres partes, controlador, modelo, y vista (MVC). Para esto vamos a crear una carpeta llamada apps/, en la cual vamos a tener una carpeta controllers, otra models, y otra views.
Necesitamos una carpeta para guardar todos nuestros archivos de configuracion, para seguir ejercitando nuestro lado creativo vamos a llamarla config/. Y otra carpeta para nuestros layouts, que la vamos a llamar con el mismo nombre.
A partir de lo que mencionamos anteriormente, nuestra estructura de directorios tendría que quedarnos de la siguiente manera.
Una vez definida nuestra estructura de directorio como siguiente paso vamos a incorporar los componentes de Zend Framework a nuestro proyecto. Hay varias formas de hacerlo, la que uso yo para no ocupar espacio innecesario en duplicar ZF es crear una carpeta Zend, en alguna parte de mi sistema, y a partir de ahí crear symlinks a cada proyecto, de esta forma, solo tengo una copia de ZF, y cada vez que hay alguna actualizacion de ZF solo actualizo una carpeta.
Supongamos que nosotros tenemos en /usr/local/Zend/apache2/htdocs/ nuestros proyectos, y en ese mismo lugar una carpeta Zend, con todos los componentes de Zend Framework.
Abrimos una consola y ejecutamos el siguiente comando.
$ ln -s /usr/local/Zend/apache2/htdocs/Zend/ /usr/local/Zend/apache2/htdocs/proyecto/library/Zend
2- Bootstrap.
El próximo paso es configurar nuestro bootstrap. El cual va a estar dentro de nuestra carpeta html, y vamos a llamarlo index.php.
-
-
<?php
-
‘config’ . PATH_SEPARATOR .
-
‘apps/models’ . PATH_SEPARATOR .
-
‘apps/controllers’ . PATH_SEPARATOR . PATH_SEPARATOR .
-
/**
-
* Carga las clases que sean necesarias
-
*/
-
include "Zend/Loader.php";
-
Zend_Loader::registerAutoload();
-
/**
-
* Configuración inicial
-
*/
-
date_default_timezone_set(‘America/Buenos_Aires’);
-
/**
-
* Setup controller
-
*/
-
$controller = Zend_Controller_Front::getInstance();
-
$controller->setControllerDirectory( ‘../apps/controllers’ );
-
$controller->throwExceptions( true ); //Inicialmente esta en true, cuando pasemos a produccion deberia estar en false
-
// DISPATCH!
-
$controller->dispatch();
-
?>
-
La idea es que nuestro bootstrap no sea demasiado complejo. Primero vamos a definir el path de nuestros directorios, a los cuales queremos acceder de forma facil. Mas adelante hablaremos del componente Zend_Loader, y que es el registerAutoload. Ademas le indicamos que nos muestre todos los errores, y los problemas de versiones. Y por ultimo, le decimos que ejecute el modulo que corresponda, y que lo busque en nuestra carpeta apps/controllers/
3- Configuramos el ambiente, y las reglas de Rewrite
Lo siguiente a crear son las reglas de rewrite para que se redireccione al bootstrap cada vez que se requiera algo, salvo en el caso que sea un js, css, jpeg, o cualquier extension que no sea necesario procesarla desde el bootstrap.
Nuestro archivo .htaccess tambien va a estar dentro de la carpeta html/ y tiene que tener el siguiente contenido.
RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
Ahora necesitamos configurar nuestro virtual host, para eso editamos el archivo httpd.conf de apache, al final de todo ingresamos el siguiente codigo
<VirtualHost *:80>
ServerAdmin admin@admin.com
DocumentRoot “/usr/local/Zend/apache2/htdocs/proyecto/html”
ServerName www.proyecto.com
ServerAlias www.proyecto.com
ErrorLog logs/proyecto-error_log
CustomLog logs/proyecto-error_log common
</VirtualHost>
Por ultimo en nuestro /etc/hosts agregamos la siguiente linea.
127.0.0.1 www.proyecto.com
4- Crear nuestro primer modulo
Una vez reiniciado el apache, en nuestro browser escribimos nuestra url de prueba. www.proyecto.com y si hicimos las cosas bien, nos aparece el siguiente error.
Los que nos dice esta excepcion, es que nos falta nuestro controller default que es index.
Para esto tenemos que crear dentro dentro de nuestra carpeta apps/controllers, un archivo con el nombre IndexController.php, el cual va a ser nuestro archivo principal.
IndexController.php
-
-
<?php
-
class IndexController extends Zend_Controller_Action
-
{
-
public function indexAction()
-
{
-
}
-
}
-
?>
-
Cada vez que nosotros necesitaramos agregar un modulo por ejemplo, un modulo de usuarios, tenemos que crear un controlador para ese modulo. Cada accion que podamos ver en nuestro modulo, va a estar representado por un metodo con el nombre de la accion mas la palabra Action, de esta forma, Zend_Controller_Action identifica que es una accion valida.
En el ejemplo nosotros estamos usando Index como modulo, e index como accion, en nuestro caso, a ser la accion default no necesitamos agregar en nuestra url, el nombre del modulo, y el nombre de la accion, aunque si lo hacemos nos anda igual, por ejemplo si tipeamos www.proyecto.com/index/index/ vamos a tener el mismo resultado que www.proyecto.com o que www.proyecto.com/index/, eso es porque ZF interpreta que sino se especifica un modulo en la url, estamos hablando del modulo default (Index en nuestro caso), lo mismo con la accion.
Si nosotros queremos ver nuestro modulo de usuarios a la accion default, nuestra url seria la siguiente http://www.proyecto.com/usuarios, si queremos referirnos a la accion read, deberiamos llamarlo asi http://www.proyecto.com/usuarios/read/.
En articulos anteriores vimos un poco del patron de disenio MVC, no voy a entrar en detalles en este articulo.
El patron MVC
Zend Framework y el patron MVC
Nuestro modulo Index, tiene que mostrar algo en el browser, esto lo vamos a configurar desde nuestra vista, que en nuestro caso las vistas, las tenemos en la carpeta views/scripts/. Creamos una carpeta con el nombre del modulo, para guardar todos nuestros archivos ahi. Nos quedaria la siguiente carpeta views/scripts/index/ dentro de la cual vamos a crear un archivo, con el mismo nombre de la accion, index.phtml. La extension phtml, es la que usa como default ZF, para los archivos de la vista.
En nuestro index.phtml, vamos a generar un simple hola mundo.
index.phtml
Si todo salio bien, y ejecutamos en nuestro browser http://www.proyecto.com/
Tenemos que ver la siguiente salida
Esta es la primer entrega, donde apuntamos a la configuracion basica, mas adelante iremos aplicando mas complejidad a nuestro proyecto.



septiembre 6th, 2008 at %H:%M 01Sat, 06 Sep 2008 01:56:34 -040034.
[...] El día de hoy leyendo mis feeds me encuentro con un interesante artículo escrito por Pablo Morales con el que nos ayuda a dar nuestros primeros pasos en Zend Framework. Pueden acceder al artículo en cuestión dirigiendose a la entrada original del autor: Empezando con Zend Framework. [...]
septiembre 6th, 2008 at %H:%M 05Sat, 06 Sep 2008 17:33:55 -040055.
Hey !, muy agradecido por el artículo. Espero con ansias la continuación, saludos desde Valparaíso, Chile.
septiembre 8th, 2008 at %H:%M 08Mon, 08 Sep 2008 08:19:02 -040002.
[...] Empezando con Zend Framework. vía: El artel del desarrollo web [...]
septiembre 8th, 2008 at %H:%M 09Mon, 08 Sep 2008 09:16:42 -040042.
[...] Empezando con Zend Framework. vía: El artel del desarrollo web [...]
septiembre 26th, 2008 at %H:%M 03Fri, 26 Sep 2008 15:25:34 -040034.
Ey! Siempre me ha dado pereza trabajar con un Framework. Pero prometo que si haces una segunda parte de este artículo intentaré darle una oportunidad a Zend.
Estoy especialmente interesado en trabajo con bases de datos. ¿Que tal un ejemplo con un form simple?
Muchas gracias!!
septiembre 26th, 2008 at %H:%M 03Fri, 26 Sep 2008 15:42:24 -040024.
Dale Xabi, me retrase un poquito, pero de este lunes no pasa que subo la segunda version
diciembre 17th, 2008 at %H:%M 08Wed, 17 Dec 2008 08:53:42 -050042.
Excelente tuto!!! Está clarisimo y es ideal para comenzar utilizando Zend Framework
diciembre 17th, 2008 at %H:%M 09Wed, 17 Dec 2008 09:25:32 -050032.
gracias mrGhost
enero 20th, 2009 at %H:%M 01Tue, 20 Jan 2009 01:43:45 -050045.
Excelente blog, buenisimos ZF how to’s.
enero 20th, 2009 at %H:%M 07Tue, 20 Jan 2009 19:38:32 -050032.
Holas tengo un probelima mira en la url del navegador tengo que poner
http://zfblog/index.php
si pongo
http://zfblog/index/index
me da el error de que no existe el archivo
Not Found
The requested URL /index/ was not found on this server.
tengo configurado el virtual bien y todo
he estado trabajando con el zend studio for eclipse, si acaso pudieras darme un idea de cual pueda ser el error te estaria muy agradecido
enero 20th, 2009 at %H:%M 11Tue, 20 Jan 2009 23:45:18 -050018.
Esto es porque no esta ejecutando correctamente tu .htaccess, esto puede ser
1- Porque no tenes activado esta opcion en tu configuracion de apache.
2- No tenes apache
3- Estas pisando las reglas con otras reglas.
enero 21st, 2009 at %H:%M 10Wed, 21 Jan 2009 10:35:28 -050028.
Gracias por la respuesta,
1.- a la primera no se me estoy poniendo a investigar.
2.- si tengo apache y esta configurado.
3.- ¿?
pos no se eso tambien me pongo a investigar
de todas formas gracias por la respuesta y cualquiercosita te vuelvo a preguntar
enero 21st, 2009 at %H:%M 10Wed, 21 Jan 2009 10:40:27 -050027.
Las reglas de rewrite son las que hacen que toda accion, vaya a tu index.php, en este caso esas reglas no estan funcionando, por eso digo que por ahi hay otra regla que lo esta pisando.
Para esto en tu virtual host, tenes que tener activo el Rewrite Engine
fijate que la directiva la podes cargar httpd.conf
enero 21st, 2009 at %H:%M 11Wed, 21 Jan 2009 11:08:29 -050029.
holas otra ves yo
mira he estado configurando el apache nuevamente y me sale este error
[Wed Jan 21 10:00:58 2009] [error] [client 127.0.0.3] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use ‘LimitInternalRecursion’ to increase the limit if necessary. Use ‘LogLevel debug’ to get a backtrace.
lo que hice es poner esta configuracion dentro de mi host virtual
ServerAdmin bolivar_lpz@algo.com
#ServerRoot “D:/MobiusWS/”
DocumentRoot “D:/MobiusWS/quantum/public/”
ServerName quantum
RewriteEngine on
Options Includes FollowSymLinks
Order allow,deny
Allow from all
AllowOverride All
ErrorLog logs/quantum-error.log
CustomLog logs/quantum-log.log common
enero 21st, 2009 at %H:%M 11Wed, 21 Jan 2009 11:11:11 -050011.
holas bien logre hacer que ande con esa configuracion y en el .httaccess los siguiente
RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
gracias por la ayuda
enero 21st, 2009 at %H:%M 11Wed, 21 Jan 2009 11:24:21 -050021.
Gracias por postear el error y la respuesta.
Este .htaccess es vital para todos tus proyectos con ZF.
Te cuento lo que hace.
la primer linea activa las reglas de rewrite.
La segunda, dice, que todo lo que termine en js, o ico, o gif, o jpg, o css, o png, lo redireccion a index.php.
Esto es asi, para que todo lo que no sea .php o .phtml, se busque tranquilamente dentro del sistema. El resto lo procesa tu front controller, para saber que modulo cargar
Saludos Paolo
febrero 11th, 2009 at %H:%M 04Wed, 11 Feb 2009 04:57:26 -050026.
Buenos Días,
Estoy empezando a programar con las estructuras Zend Framework a travez del IDE Zen Studio y el error que tengo es que a la hora de depurar con Debug as -> PHP script, no enruta las paginas correctamente.
El proyecto que estoy intentando depurar es bastante sencillo y enruta correctamente cuando lo ejecuto sin el IDE. Sin embargo , cuando lo ejecuto con el depurardor , ejecuta bien la pagina principal (index.php) , pero al pulsar cualquier referencia en ella que vaya a otra pagina para realizar alguna acción determinada (add.phtml, edit.phtml, extract.phtl……..) me muestra la siguiente salida “blank/index/extract”.
Un Saludo y muchas gracias por adelantado
febrero 11th, 2009 at %H:%M 08Wed, 11 Feb 2009 08:17:30 -050030.
Hola Yago0.
Sobre este error en particular no tengo idea, tendras que googlear un rato, el Zend Studio For Eclipse 6.0, trae soporte para ZF con el debug incluido.
Lo poco que lo he usado anda bastante bien,.
febrero 11th, 2009 at %H:%M 03Wed, 11 Feb 2009 15:30:33 -050033.
Muchas gracias, intentaré usar otra herramienta para depurar.
Un Saludo
marzo 18th, 2009 at %H:%M 12Wed, 18 Mar 2009 00:38:32 -040032.
Hola! tengo dos dudas..
1. donde pongo el comando $ ln -s /usr/local/Zend/apache2/htdocs/Zend/ /usr/local/Zend/apache2/htdocs/proyecto/library/Zend soy muy novato arranque en el paso 2 por no saber hacer este, y me tira el siguiente error
Parse error: syntax error, unexpected ‘.’ in D:\xampp\htdocs\ZF1erproy\html\index.php on line 41
2. tengo instalado el xampp y el zend studio.. me puede traer algun problema¿? gracias
marzo 18th, 2009 at %H:%M 11Wed, 18 Mar 2009 23:01:31 -040031.
Hola @Martindex.
1- Fijate que estoy poniendo el path absoluto tanto en la carpeta a enlazar como el resultado.
El error puede ser por otra cosa, decime que tenes en la linea 41
2- No te deberia dar ningun problema. Zend Studio o cualquier eclipse deribado te crea una carpeta .metada que no te molesta para nada
abril 24th, 2009 at %H:%M 10Fri, 24 Apr 2009 22:36:34 -040034.
hola, llegue aca desde la lista de php, y despues de haber bajado el zend, te pregunto, en ambiente windows, es esto mismo? o que tendria que tener en cuenta para configurarlo?…
millon de gracias por las respuestas!
saludos
JP.
abril 24th, 2009 at %H:%M 11Fri, 24 Apr 2009 23:32:23 -040023.
@Juan Pablo: Hola, me acuerdo de ti. Tanto para windows/linux/mac la configuracion es practicamente igual.
mayo 22nd, 2009 at %H:%M 08Fri, 22 May 2009 20:02:13 -040013.
hola muy buen post amigo mio ya tengo lo basico de zend
lo uqe kiero es si es posible me informe como puedo hacer para poder usar google docs
las ojas de calculo y el google calendario en mi web
como puedo integrar dichas herramientas a mi web
se que se usa zend pero no se cual es el proxedimineto
me podrias ayudar?
mayo 28th, 2009 at %H:%M 02Thu, 28 May 2009 14:19:40 -040040.
@jossey espejo:
Vas a tener que leer la doc oficial para usar Zend_Gdata http://framework.zend.com/manual/en/zend.gdata.html
Todavia no lo he usado, pero seguramente no sea muy dificl.
Saludos
junio 17th, 2009 at %H:%M 01Wed, 17 Jun 2009 13:17:20 -040020.
Pablo me parece interesantisimo esto del ZF y me gustaría aplicarlo en proyecto bajo la web que voy a desarrollar, el problema es que yo soy un poco novato en PHP, y por ende en ZF y tengo 3 preguntas sobre código que he estado viendo del ZF.
1. he visto este método varias veces getInstance(), quisiera saber para que se usa y si es un método que implementa ZF o es de PHP.
2. he visto esta sintaxis varias veces en ZF Zend_Loader::registerAutoload(); no se trata de la clase y el método en sí sino de los dos puntos (::) eso que significa y si esa sintaxis es propia de ZF o de PHP
3. $response->insert(’sidebarLeft’, $this->view->render(’sidebarLeft.phtml’)); que hace la función insert y cuales son los parametros que recibe y si es de ZF o PHP.
Perdona tanta molestia, pero se que puedes ayudarme.
Gracias.