Guía Zend Intro y 1ra Aplicación

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

of 20

  • date post

    16-Jul-2015
  • Category

    Documents

  • view

    206
  • download

    0

Embed Size (px)

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 ubic