Guía Zend: Review de otros componentes que seguramente vayas a usar
En el capítulo final de esta introducción a Zend Framework veremos varios componentes útiles que nos quedaron en el tintero, no hablaremos muy en profundidad sobre ellos pero veremos algunos ejemplos y lo más interesante de cada uno.
Zend_Cache
¿Qué podemos cachear? El contenido del buffer de salida, el resultado de una función, de un método o un objeto propiamente dicho, etc. ¿Dónde podemos guardar la cache? En el sistema de archivos, en una base de datos, en un servidor memcached, etc.
Las distintas cosas que podemos cachear se denominan Frontends y el lugar donde guardamos la cache se denomina Backend. De esta forma, tenemos los frontends Zend_Cache_Frontend_Ouptup, Zend_Cache_Frontend_Function, Zend_Cache_Frontend_Class, etc., y los backedns Zend_Cache_Backend_File, Zend_Cache_Backend_Sqlite, Zend_Cache_Backend_Memcached, etc.
Frontend Options
Los distintos frontends tienen, entre otras, las siguientes opciones de configuración:
- caching: habilitar o deshabilitar la cache
- lifetime: el tiempo de vida de la cache
- automatic_cleaning_factor: configura cada cuanto se limpia la cache
Backend Options
Por su parte, los distintos backends presentan las siguientes opciones de configuración:
- cache_dir: directorio en el que se guardaran los archivos de la cache
- hashed_directory_level: permite configurar la cantidad de niveles de directorios, es muy útil cuando tenemos varios miles de archivos
Pasemos a ver un ejemplo:
$frontend = "Core"; $backend = "File"; $frontendOptions = array("lifetime" => 7200); $backendOptons = array("cacheDir" => "/cacheFiles"); $cache = Zend_Cache::factory($frontend, $backend, $frontendOptions, $backendOptions); if (!$result = $cache->load("queryPesado")) { /* ejecutamos la consulta pesada y la cacheamos para próximos pedidos */ $cache->save($result, 'queryPesado'); } return $result;
Zend_Debug
Se podría decir que Zend_Debug::dump() es una versión mejorada del típico var_dump(): formatea el código, permite agregar a la expresión recibida un label para poder identificar un dump de otro, etc. Su sintaxis es:
Zend_Debug::dump($var, $label = null, $echo = true);
Zend_Paginator
Zend_Paginator nos permite paginar cualquier tipo de información, por ejemplo permitiendonos trabajar directamente con un Zend_Db_Select o un simple array de php. En este mini articulo trabajaremos con Zend_Db_Select’s, veamos que simple es:
// en el controlador... // al factory le pasamos una instancia de Zend_Db_Select, el limit sera seteado de acuerdo a los valores que luego pasemos a setCurrentPageNumber() y setItemCountPerPage() $paginator = Zend_Paginator::factory($select); // seteamos la página actual y la cantidad de items mostrados por página $paginator->setCurrentPageNumber($page)->setItemCountPerPage($count); //lo asignamos a una variable de la vista $this->view->paginator = $paginator; // en la vista... // podemos recorrer $paginator, el cual implementa un iterator que contendrá los resultados del query que recibió como parámetro foreach ($paginator as $value) { echo $value["campo_bdd"]; } // paginator.phtml es el partial encargado de armar la paginación echo $this->view->paginationControl($this->paginator, 'Sliding', 'paginator.phtml') // paginator.phtml <?php if ($this->pageCount): ?> <div class="paginationControl"> <!-- Previous page link --> <?php if (isset($this->previous)): ?> <a href=">?php echo $this->url(array('page' => $this->previous)); ?>"> < Previous </a> | <?php else: ?> <span class="disabled">< Previous>/span> | <?php endif; ?> <!-- Numbered page links --> <?php foreach ($this->pagesInRange as $page): ?> <?php if ($page != $this->current): ?> <a href=">?php echo $this->url(array('page' => $page)); ?>"> <?php echo $page; ?> </a> | <?php else: ?> <?php echo $page; ?> | <?php endif; ?> <?php endforeach; ?> >!-- Next page link --> <?php if (isset($this->next)): ?> <a href="<?php echo $this->url(array('page' => $this->next)); ?>"> Next > </a> <?php else: ?> <span class="disabled">Next ></span> <?php endif; ?> </div> <?php endif; ?>
Zend_Http_Client
Otro componente que nos va a servir conocer es Zend_Http_Client, el cual nos provee una potente interface para realizar HTTP requests por ejemplo para hacer uso de la API de algún servicio web, enviar datos por POST o GET, setear headers etc., permitiéndonos obtener los headers y el body de la respuesta obtenida. Posee varios adapters (socket, proxy y cURL) En este ejemplo haremos un request muy simple a twitter para leer el el último update de @maestros
$client = new Zend_Http_Client('http://api.twitter.com/1/statuses/user_timeline/maestros.json'); // seteamos el método y un parámetro GET $client->setMethod("GET")->setParameterGet('count', '10'); // ejecutamos el request $client->request(); // obtenemos la respuesta generada en el paso anterior $response = $client->getLastResponse(); // si salio todo bien... if ($response->getHeader("Status") == "200 OK") { $data = Zend_Json::decode($response->getBody()); echo "Ultimo status: ".$data[0]["text"]; } else { echo "Ocurrió un error al leer los datos."; }
Zend_Mail
Un completísimo componente para el envío de mails. Enviar un mail puede ser tan simple como crear el objeto y setear destinatario, remitente y contenido. Entre sus funciones mas avanzadas también nos permite usar para el envía un servidor SMTP (por defecto usa la funcion mail() de PHP), enviar mails con HTML, adjuntar archivos, etc. En el manual hay algunos ejemplos básicos asi que aca veremos uno un poquito más avanzado, usando gmail como servidor smtp y enviando un archivo adjunto:
// configuración del smtp y datos para realizar la autenticación en el mismo $config = array( 'auth' => 'login', 'username' => '[email protected]', 'password' => 'pass', 'ssl' => 'ssl', 'port' => 465); $transport = new Zend_Mail_Transport_Smtp('smtp.gmail.com', $config); $mail = new Zend_Mail(); $mail->setBodyText("Hola te envio este mail"); $mail->setFrom('[email protected]', 'Yo'); $mail->addTo('[email protected]'); $mail->setSubject('Probando envío'); // adjuntamos un archivo, $file es un archivo local $at = $mail->createAttachment(file_get_contents("prueba.txt")); // nombre del archivo adjunto $at->filename = "archivo_adjunto.txt"; $mail->send($transport);
Finalizando la guía
Finalizando con la Guía Zend te invitamos a revisar los 10 capítulos que la conforman:
- Introducción y primera aplicación
- 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
- Integración con AJAX
- Introducción a Zend_Session y Zend_Auth
- Review de otros componentes que seguramente vayas a usar
Agradecemos a todos aquellos que han seguido semana tras semana la guía, queremos preparar una continuación a la Guía Zend y nos encantará saber qué les pareció y qué otros temas les gustaría que trabajemos en este mismo formato. Además, si te interesa formar parte de nuestro equipo de trabajo de las guías no dudes en contactarnos.
Gracias hermano por esta guia esta de lux, sinceramente estoy aprendiendo Zend y esta guia me esta facilitando la vida, salu2 desde Mexico
Gracias por el trabajo Rodrigo.
Me parece que la guía de introducción está muy bien elaborada y explicada.
Ahora bien como dices que tienes pensado seguir con el Framework de Zend, me parece en lo personal que sería muy interesante desarrollar un pequeño sistema que tenga:
– Login
– Mantenimiento de clientes, ingreso, modificación, consulta y eliminación.
– Una consulta de todos los clientes en una tabla, que se puedan paginar los registros de 10, 25, etc.
– Un reporte de clientes.
Me parece que esta práctica nos dejaría muchísimo más claro el arranque de una aplicación y la guía que ya nos regalaste cobraría mayor importancia para ponerla en práctica.
Saludos cordiales
Puede parecer que lo que dice Giovanni Castillo es una locura o falta de iniciativa de uno mismo, pero cuantos manuales y tutoriales hay en la red y son pura basura solo porque el expositor lo escribió basándose de puras suposiciones y teorías. Este manual esta bastante completo y un ejemplo práctico no estaría nada mal.
Saludos amigos y felicidades por tan generosa y noble labor.
Que tal Giovanni, prometo hacer algo al respecto 😉
Gracias a todos por los comentarios
Saludos!
[…] Guía Zend: Review de otros componentes que seguramente vayas a usar […]
Estan excelentes los tutoriales
Para cuando mas entregas de este turorial, asi como ejemplos.
Finalmente no hubo el proyecto ejemplo??
Aun asi felicidades por la guía,gracias a ella me voy a atrever a empezar con Zend
gracias!!