Guía Zend Intro y 1ra Aplicación

download Guía Zend Intro y 1ra Aplicación

of 20

Transcript of Guía Zend Intro y 1ra Aplicación

2012Gua Zend: Introduccin y primera aplicacin

Zend FrameworkZend Framework es un framework open source para PHP desarrollado por Zend, empresa encargada de la mayor parte de las mejoras hechas a PHP, por lo que se podra decir que es el framework oficial. Nos referiremos a Zend Framework por sus iniciales ZF en esta gua de publicacin semanal.

DPL SysByte 10/03/2012

Gua Zend: Introduccin y primera aplicacinTags: PHP, Desarrollo Web, Zend, framework, guia, y 5 ms.

Zend Framework es un framework open source para PHP desarrollado por Zend, empresa encargada de la mayor parte de las mejoras hechas a PHP, por lo que se podra decir que es el framework oficial. Nos referiremos a Zend Framework por sus iniciales ZF en esta gua de publicacin semanal.

Caractersticas principalesZF implementa el patrn MVC, es 100% orientado a objetos y sus componentes tienen un bajo acoplamiento por lo que los puedes usar en forma independiente. Un punto importante es que nos brinda un estndar de codificacin que deberamos seguir en nuestros proyectos. A su vez, cuenta con soporte para internalizacin y localizacin de aplicaciones (construir sitios multi-idioma, convertir formatos de fechas, monedas, etc. segn la regin. Algo importantsimo para crear aplicaciones con un enfoque global y llegar de la mejor manera a la mayor cantidad de gente posible). Facilita el setup de nuestro proyecto brindndonos herramientas para crear la estructura de directorios, clases, etc. por lnea de comandos, integracin con phpUnit por medio de Zend_Test para facilitar el testing de nuestra aplicacin. Todava queres ms? Posee adapters para gran cantidad de tipos de bases de datos diferentes; brinda componentes para la autenticacin y autorizacin de usuarios, envo de mails, cache en varios formatos, creacin de web services, etc. Es simple, si tenes algo que hacer, seguramente ya lo tuvo que hacer alguien antes! As que aprovecha eso para invertir menos tiempo en el desarrollo y hacer uso de componentes ya testeados.

InstalacinLo primero es descargar la ultima versin desde el sitio oficial. Una vez descargado creamos la estructura de directorios. Puedes crearla automticamente con Zend_Tool_Framework, o puedes hacerlo manualmente. La estructura inicial ser as:

1

Como vemos tenemos unos cuantos archivos bsicos por crear, ya lo iremos viendo y vern que simple que es.

Action ControllersLos controladores son clases que extienden de Zend_Controller_Action. Cada controlador tiene unos mtodos especiales cuya nombre tiene el sufijo Action, llamados action methods. Por default, las URLs en ZF son del tipo /controlador/action, es decir que si en nuestro IndexController tenemos un pruebaAction lo podremos ejecutar desde/index/prueba. www.maestrosdelweb.com/index/prueba (si estuviramos trabajndolo en este sitio) El IndexController es el controlador por default.?

01 { 02 03 public function init() 04 { 05 } 06 07 public function indexAction() 08 { 09 $this->view->mensaje = 'Primera aplicacin con Zend Framework!';2

class IndexController extends Zend_Controller_Action

} 10 11 12 } 13 14

Su estructura es muy simple, en el mtodo init() podremos poner tareas de inicializacin y creamos un action llamado index, nada ms. Al ejecutarlo, ZF automticamente relaciona el nombre del action con una vista que ser renderizada. Esta vista tiene la extensin phml, as que en el caso del indexAction la vista asociada sera index.phtml dentro de la carpeta correspondiente al controlador index enviews/scripts. Para verlo bien claro: /views/scripts/{controlador}/{action}.phtml En el indexAction asignamos un texto a una variable de la vista, y en el archivo index.phtmllo mostramos haciendo echo $this->mensaje; en artculos posteriores hablaremos mas en detalle sobre controladores, vistas y demas.

ErrorControllerOtro controlador particular es el ErrorController. Cada vez que se quiera ejecutar una pgina que no existe (error 404) o se produzca algn error en la aplicacin (error 500) ser ejecutado este controlador.?

01 class ErrorController extends Zend_Controller_Action { 02 03 public function errorAction() 04 { 05 $errors = $this->_getParam('error_handler'); 06 switch ($errors->type) { 07 case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE: 08 case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER: 09 case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION: 10 11 $this->getResponse()->setHttpResponseCode(404); 12 $this->view->message = 'Pagina no encontrada'; break; 13 default: 14 $this->getResponse()->setHttpResponseCode(500); 15 $this->view->message = 'Ocurrio un error inesperado'; 16 break;3

} 17 18 } 19 } 20 21 22 23

Configurando el htacces y el index.phpEn htaccess lo que hacemos es, aplicando el patrn Front Controller, redirigir todas las peticiones al index.php y luego all decidir que pgina mostrar. RewriteEngine On RewriteRule !\.(js|ico|txt|gif|jpg|png|css|pdf)$ index.php As que el siguiente paso ser crear nuestro index:?

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

// Definimos la ruta de /application defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); // El entorno de trabajo actual defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); // Configuramos el include path, es decir los directorios donde estarn nuestros archivos $rootPath = dirname(__FILE__)."/.."; set_include_path($rootPath . '/application/config' . PATH_SEPARATOR . $rootPath . '/library/'); // Zend_Application require_once 'Zend/Application.php'; // Creamos la aplicacion $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $application->bootstrap()->run();

4

Aqu creamos dos constantes (APPLICATION_PATH y APPLICATION_ENV) que usaremos a lo largo de la ejecucin, configuramos el include path, creamos nuestra instancia de Zend_Application y le damos run!

Bootstrap y application.iniEn el index estamos haciendo referencia a un archivo llamado application.ini que todava no creamos y que es ni ms ni menos que la configuracin de nuestro sitio. Para empezar crearemos algo simple:?

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

[production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 ; bootsrap bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" ; frontController resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" ; layout resources.layout.layoutPath = APPLICATION_PATH "/layouts" ; Database resources.db.adapter = "pdo_mysql" resources.db.params.host = "localhost" resources.db.params.username = "user" resources.db.params.password = "pass" resources.db.params.dbname = "dbname" [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 [testing : production]

Hecho esto, debemos crear el Bootstrap, registrando en el autoloader el namespace de nuestra aplicacin para poder instanciar las clases que usemos sin necesidad de hacer antes un include de dicho archivo:?

01 class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { 02 protected function _initAutoloader() {5

$autoloader = Zend_Loader_Autoloader::getInstance(); 03 $autoloader->registerNamespace('App_')->setFallbackAutoloader(true); 04 05 $resourceAutoloader = new Zend_Loader_Autoloader_Resource( 06 array( 07 'basePath' => APPLICATION_PATH, 08 'namespace' => 'App', 'resourceTypes' => array( 09 'form' => array('path' => 'forms/', 'namespace' => 'Form'), 10 'model' => array('path' => 'models/', 'namespace' => 'Model') 11 ) 12 ) 13 ); } 14 15 16 } 17 18 19

Seteando un layoutPor ltimo creamos el layout de nuestro sitio. Dentro de la carpeta layouts, creamos el archivo layout.phtml:?

01 02 >!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 03 >html> >head> 04 >meta http-equiv="content-type" content="text/html; charset=utf-8"> 05 >title>Primera aplicacion en Zend Framework>/title> 06 >/head> 07 >body> >?php 08 echo $this->layout()->content; 09 ?> 10 >/body> 11 >/html> 12Todo debera funcionar correctamente, podemos probar entrando a sitio.com, sitio.com/index, sitio.com/index/index, en todos ellos podemos ver el mensaje de bienvenida.

Creando una aplicacin modularOtra organizacin de directorios muy usada es la siguiente:

6

Aqu tenemos nuestro sitio dividido en mdulos, cada cual con sus propios controladores y vistas. Para realizar este cambio por un lado debemos cambiar la lnea: resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" por resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" Y por otro lado, como ya dijimos ahora tenemos nuestro sitio organizado en mdulos. El mdulo por defecto se llama default, as que creamos el directorio modules con un subdirectorio correspondiente al modulo default y copiamos all las carpetas views y controller. Listo! Ya podemos acceder otra vez, teniendo en cuenta que las urls ahora sern del tipowww.maestrosdelweb.com/modulo/controlador/action. Podremos verlo en funcionamiento desde maestrosdelweb.com, maestrosdelweb.com/default, maestrosdelweb.com/default/index, maestrosdelweb.com/default/index/index. En cuanto a los controladores, es importante aclarar un pequeo cambio, usando esta estructura de directorios llevan como prefijo el nombre del mdulo al que pertenecen. As, el

7

controlador Usuarios del modulo Alta se llamara Alta_UsuariosController. Esto no cuenta para el modulo default, los controladores all ubicados no llevan ningn prefijo especial. En este punto podramos decir que hemos terminado con la instalacin. En los prximos artculos hablaremos un poco ms en detalle sobre las cosas que aqu vimos casi superficialmente, y sobre muchas otras.

Continuando con la guaEstamos preparando varios captulos para profundizar en el Framework Zend que iremos publicando cada semana para finalmente ofrecer una descarga completa en PDF.

Introduccin y primera aplicacin Modelos y Zend_Db Controladores, Front Controller Plugins y Action Helpers Vistas, View Helpers y Layout Crea y maneja formularios con Zend_Form Sobre decorators en Zend_Form Construyendo aplicaciones multi idioma con Zend_Translate Integracin con AJAX Introduccin a Zend_Session y Zend_Auth Review de otros componentes que seguramente vayas a usar

Ir al siguiente captulo: Gua Zend: Modelos y Zend_Db Siguiente captulo: Modelos y Zend_Db Otros artculos relacionados

Nuestras guias Descarga por un Tweet la Gua ASP.NET y Gua Zend para dispositivos mviles Gua Zend: Review de otros componentes que seguramente vayas a usar Cmo conectar un sitio web con Twitter usando Zend Framework Te gust?

Rodrigo Souto para Maestros del Web. Agrega tu comentario | Enlace permanente al artculo Sguenos en: @maestros | Fan page

8

34Comentarios1.

1Pablo Morales Maestros se viste de verde y blanco para hablar de ZF. Esta muy bueno que blogs con tanta difusion hablen de este framework, que para muchos es el definitivo.18.05.2010 - 07:18

2.

2Robert Vaya esto se ve muy bien.. me gusta este foro porque siempre resuelven las dudas de todo lo que es php, y ahora entrando al mundo de Zend.. Fantastico.. mas que buenas noticias18.05.2010 - 07:42

3.

3Pablo Morales Por cierto Rodrigo. Me parece que tenes opciones mas rapidas de crerar una aplicacion como esta con Zend_Tool. Es mucho mas facil, y con 3 lineas ya tenes tu proyecto zf create project MiProyecto cd MiProyecto zf enable layout Tu .htaccess se mejoro hace un tiempo ya ahora el que se usa por default es este, que contempla mejor el manejo del contenido estatico sin la necesidad de agregar todas las extensiones que necesitas. Sino lo encuentra en la carpeta public, lo envia al index.php Espero que te sirva. RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR]

9

RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ [NC,L] RewriteRule ^.*$ index.php [NC,L] Una de las cosas interesantes que descubri con ZF en estos dias. Fue despues de actualizar mi ubuntu, la nueva version te instala php 5.3, mis aplicaciones viejas con las que sigo trabajando, andan perfectamente sin ningun problema, ningun error, ningun warning, no tengo activados los Strict, pero no son un problema. Tanto las empresas como los usuarios tienen que entender que trabajar con un framework, y mas con uno tan prolijo y con tantos recursos humanos encima de el, van a mejorar de formas increibles los sistemas web futuros.18.05.2010 - 07:53

1.

4apateiro Hola Pablo, una pregunta, qu herramientas de desarrollo utilizas para trabajar en Linux? Yo siempre he trabajado desde Windows, pero voy a empezar a hacerlo desde alguna distro de linux. Hasta ahora he utilizado siempre DW y el paquete Wamp Server para instalar PHP, Apache y MySQL. Alguna recomendacin? Gracias.18.05.2010 - 13:38

2.

5Pablo Morales Para trabajar en linux siempre uso IDE: Netbeans http://netbeans.org/ Eclipse PDT http://eclipse.org/pdt

10

Generalmente depende mucho de mi pc, sino es muy bueno uso pdt. Que es bastante mas liviano que pdt, aunque la version 6.8 de netbeans me anda muy bien, en mi vieja pc de escritorio. Lo que es para manejo de base de datos. O uso jdeveloper que tiene plugins para mysql, cuando no uso oracle. o navicat, es pago pero es muy bueno vale la pena. Despues uso la consola. Tengo instalado vim-full por si tengo que trabajar en algun servidor remoto. Firefox/Google Chorme Y una vbox con windows xp para probar ie.19.05.2010 - 13:45

3.

6Rodrigo Souto Hola Pablo, con respecto a Zend_Tool tenes razon, pero ya que es un articulo introduccion y tenemos que hablar de layout, bootstrap, application.ini, modulos, contoladores y demas me parecio que valia la pena tocar un poco cada cosa, ahora que tenemos una idea un poco mas completa sobre ZF, si queremos usar Zend_Tool vamos a tener cero problema =) Buen tip el del htaccess Saludos31.05.2010 - 19:14

4.

7Marco woooouuu tan sencillito? voy a probar gracias por el dato18.05.2010 - 08:52

5.

8inyaka

11

buen tuto . Por cierto, veo todo verde Como es Zend respecto al rendimiento? y a la escalabilidad? tambin he escuchado buenas cosas de YII, que creo que sera el prximo que pruebe.18.05.2010 - 08:54

1.

9Pablo Morales Zend Framework es increiblemente escalable,pero bien bien, a que te referis?18.05.2010 - 10:48

6.

10Pablo Miranda Cual es la diferencia de estructurar tus archivos para crear aplicaciones modulares o de la otra forma?18.05.2010 - 09:00

7.

11jonatan Genial esta guia! Exitos!18.05.2010 - 15:34

8.

12francAlvarez Super, muchas gracias por compartir esta gua! Solo tengo una duda, de los archivos a descargar en la pgina oficial, cual debe descargarse? Zend Framework Full Package (El que necesita registro) Zend Framework 1.10.4 Full (Sin registro) Que diferencias tienen? Saludos y nuevamente gracias!

12

19.05.2010 - 09:19

9.

13Giovanni Castillo Excelente esta idea de promover el desarrollo de mejores aplicaciones web a travs de frameworks. Espero con ansias los siguientes captulos de esta gua. Felicitaciones y sigan adelante.19.05.2010 - 11:07

10.

14Jean-Claude ZF es un poderoso framework, en donde lo utilizo hace como 3 anhos ya desde la version 0.6. Es facil complementar con Smarty (Templates Engine), YAML (Css Framework) y Dojo Toolkit(Javascript Framework). Muy interesante el articulo, y dejo este link tambien para aquellos que quiera profundizar mas: http://www.akrabat.com http://weierophinney.net/matthew/19.05.2010 - 11:38

11.

15cristhian choquecallata saludos, muy bueno ya era hora maestros del web, estare al pendiente de los siguientes capitulos de este tutorial, comentaos que me trabe por las diferencias que an existido y los cambios de sintaxis en las versiones de ZF chauu chauu maestros19.05.2010 - 12:55

12.

16Pablo Morales

13

@apateiro En linux podes usar netbeans, o eclipse pdt, es muy facil instalarlos. Para base de datos tenes jdeveloper, mysql query browser, navicat, entre otros. @francAlvarez las diferencias entre la version full y la mini son los complementos, antes eran las extensiones de dojo, pero hoy tenes un mas cosas como X_Jquery entre otras. No uso nada de este paquete con el minimal podes seguir este tutorial a la perfeccion19.05.2010 - 13:48

13.

17lex Codeigniter es mejor que zend asi lo dijo el propio creador de php.20.05.2010 - 03:59

1.

18Pablo Morales Leiste el articulo completo donde Rasmus explicaba el porque preferia CodeIgniter? El baso sus pruebas en cuanto demoraban en imprimir un Hola Mundo. Si vos queres hacer con codeingiter un hola mundo, me parece la mejor eleccion, pero si queres hacer sistemas un poco mas complejos no te ayuda mucho. Para mi entender Rasmus exagero un poco. Es lo mismo que dicen de JAVA, para imprimir un hola mundo tenes que armar una clase, un metodo y recien ahi poder hacer un hola mundo. En cambio con php solo20.05.2010 - 08:09

2.

19Yeiner Fernandez Me parece increible que hagas este comentario sin tener las reales bases. Investiga un poco antes de opinar con respecto a ZF y CI. Soy amante de los dos, y manejo muy bien CI, pero humildemente hay que reconocer que ZF es demasiadamente mas completo. Saludos!

14

08.07.2010 - 21:44

14.

20carnicero Gracias por esta introduccion de Zend, malditos frameworks no me entran ni a mentadas de madre,me agrada mas el php puro20.05.2010 - 10:49

15.

21Csar Consulta. Ya vengo probando el codigo que pones de ejemplo y me quedan una duda en la estructura de archivos que propones no indicas donde queda la carpeta layouts podrias indicarme si este va en la raiz del sitio o es un directorio anidado de application/views.24.06.2010 - 13:27

1.

22Rodrigo Souto Tienes roda la razon! falta esa carpeta en la imagen, layouts va dentro de application, en cuanto pueda lo corrijo Saludos!25.06.2010 - 11:07

16.

23Eric Valera Miller Excelente noticia saber que existe un sitio ms en donde buscar informacin de calidad para ZF!! Sugiero: Mtanle mucho a la convencin modular. Creo que es la forma de hacer ms escalable los sistemas hechos en ZF!25.06.2010 - 15:30

17.

24Kete

15

Hola. Estoy siguiendo este captulo pero tengo un problema con la lnea en la que se muestra el mensaje. Si pongo $this->layout()->content no sale nada pero si lo cambio por $this->mensaje, s que aparece el mensaje. Cul puede ser el problema? Gracias!! Un saludo.06.07.2010 - 06:44

18.

25jonas a ver soy nuevo en esto pero tengo que profundisar mucho espero que esta web me sirva de mucha ayuda -pueden mostrar de una aplicacion como un totorial!!!30.07.2010 - 18:26

19.

26karla en un proyecto de la universidad tenemos que realizar un trabajo con zend..pero me gustaria saber cual es la mejor version de este framework. como se instala esa version.y si se puede un pequeo ejemplo de como tabajar con este para tener una guia.. gracias.03.08.2010 - 08:10

20.

27sauljp07 justo lo que buscaba, muy bueno gracias21.08.2010 - 10:43

16

21.

28jonathan ale hermano me asia falta eso p darle duro a la chikilla zend saludos muy buen tutorial ahora a darle duro con practica21.09.2010 - 15:12

22.

29hamish_per Estoy empezando con ZF y esta guia esta muy wena. Solo recomiendo que especifiquen la version que utilizan para cada ejemplo. Gracias por el tutorial Rodrigo.03.10.2010 - 11:54

23.

30alcaudon Pues a mi me deja con un montn de dudas q nadie me resuelve (ser por cazurro) y sin uqe me funcione24.10.2010 - 10:06

24.

31Pablo Hola!! la gua est genial pero tengo un problemilla, he seguido todo lo que dice la gua (creo) en este

primer paso pero la web no me resuelve correctamente. Para poder ver mi web tengo que hacer lo siguiente: http://localhost:8080/proyecto_inicial_v2/public En cambio si ejecuto lo siguiente: http://localhost:8080/proyecto_inicial_v2/ http://localhost:8080/proyecto_inicial_v2/index http://localhost:8080/proyecto_inicial_v2/index/index no funciona, alguien sabe por que???

17

gracias!!!08.11.2010 - 04:13

25.

32Albert Excelente voy hacer un proyecto y pense en Zend pero aun no toco nada de cdigo y estaba pensando en ocupar Zend y con estos manuales se me har mucho ms fcil muchisimas gracias30.11.2010 - 14:59

26.

33Ariel Hola, la verdad me pareci muy interesante al artculo. Tengo mas experiencia con ASP.NET que con php, y ahora me he dado por hacer algunos proyectos en usando el framework de ZEND. La verdad no se que es lo que tengo que descargar de la pagina para instalarlo, por favor, me gustaria si alguien puede ayudarme para la instalacin nomas. Muchas Gracias [email protected] - 09:53

1.

34Albert Yo aprend a instalar Zend con este manual y me resulto de inmediato: http://www.zfforum.es/showthread.php?t=1427.12.2010 - 03:08

Los comentarios de este post estn cerrados. Si quieres seguir la discusin, debatir, criticar, sugerir o expandir el tema te invitamos a hacerlo en tu propio blog, en twitter o donde puedas publicar. No olvides enlazar a este post para que sigamos la conversacin y se genere un trackback.

11Trackbacks18

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.

de la red 21/05/2010 Tecnologas y su contexto Internet is a series of blogs (XXXII) | topeka.uy Internet is a series of blogs (XXXII) Dozer Internet is a series of blogs (XXXII) | Noticortos.com Internet is a series of blogs (XXXII) | Ultimos Avances Gua Zend: Introduccin y primera aplicacin - DbRunas Gua Zend: Modelos y Zend_Db Gua Zend: Review de otros componentes que seguramente vayas a usar Zend PHP Ingenio DS Realizar una primera aplicacin con zend | Curso Manual Tutorial Gua Zend: Crea y maneja formularios con Zend_Form

19