Un espacio para los entusiastas del web

24 jun 2010
11.899 Lecturas

Guía Zend: Review de otros componentes que seguramente vayas a usar

Tags: PHP, Zend, , , , y 1 más.

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(&#39;page&#39; => $this->previous)); ?>"> 
    &lt; Previous 
  </a> | 
<?php else: ?> 
  <span class="disabled">&lt; 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(&#39;page&#39; => $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(&#39;page&#39; => $this->next)); ?>"> 
    Next &gt; 
  </a> 
<?php else: ?> 
  <span class="disabled">Next &gt;</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:

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.

Siguiente capítulo: Video Tutoriales de Zend Framework

Rodrigo Souto para Maestros del Web.
Agrega tu comentario | Enlace permanente al artículo

Síguenos en: @maestros | Fan page

Comentarios

  1. carnicero

    Gracias hermano por esta guia esta de lux, sinceramente estoy aprendiendo Zend y esta guia me esta facilitando la vida, salu2 desde Mexico

  2. Giovanni Castillo

    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

    1. Rodrigo Souto

      Que tal Giovanni, prometo hacer algo al respecto ;)

      Gracias a todos por los comentarios

      Saludos!

  3. 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.

  4. Josue

    Estan excelentes los tutoriales

  5. Samich

    Para cuando mas entregas de este turorial, asi como ejemplos.

  6. Umec

    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!!

Los comentarios de este post están cerrados. Si quieres seguir la discusión, 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 conversación y se genere un trackback.



Acerca de
Maestros del Web nace cuando intentamos traducir Webmaster al Español. Nacimos orientados al diseño y desarrollo web. Hoy somos un espacio de apoyo para los entusiastas que participan en proyectos en la red.
Leer más de Maestros del Web