Symfony

Framework PHP orientado a objetos

Curso Symfony 2: Integrando AJAX

En la actualidad muchos de nuestros proyectos están orientados hacia la web 2.0, y es por esto que la necesidad de implementar AJAX (XmlHttpRequest) es cada vez más grande, desde su versión 1.3 el proyecto Symfony a optado por no apoyar (ni integrar) ningún framework de desarrollo Frontend (básicamente en lo que se refiere Javascript), pero eso no impide que puedas utilizar cualquier framework Javascript en tu proyecto, de hecho Symfony2 es compatible con Assetic y te permite, entre otras cosas, utilizar el YUI-compressor para optimizar los assets de tu proyecto web.

Entrando de nuevo en el tema, en este capítulo nos concentraremos en las herramientas básicas que provee Symfony2 para manipular y detectar peticiones AJAX, las cuales son completamente transparentes para el cliente web (o framework que utilices), de esta forma podrás implementar AJAX de la forma que quieras y con el Framework JS que desees.

Detectando peticiones XmlHttpRequest desde el controlador

La clase Request contiene un función para verificar si la petición HTTP fue enviada por AJAX, es decir por medio del XmlHttpRequest:

// retorna true o false
$this->getRequest()->isXmlHttpRequest();

¡Así de simple!, con ello puedes comprobar de forma efectiva desde tus controladores si la petición fue enviada por AJAX, lo que te permite, entre otras cosas, renderizar una plantilla específica, crear un objeto Response y controlar una salida personalizada como por ejemplo un JSON o XML.

Detectando peticiones AJAX desde la Vista

Controlar AJAX desde el controlador es muy efectivo, pero a veces por la estructura interna de nuestras plantillas (las que usas como layout y las que heredan un layout con la estructura HTML) puede resultar tedioso modificar cada controlador para devolver una plantilla específica, y ¿si dicha plantilla extiende un layout HTML (<html>, <head> y <body>)?: sabemos muy bien que en el caso de AJAX solo necesitamos el fragmento HTML específico, no un árbol HTML completo, por suerte en TWIG podremos hacer esto:

{% extends app.request.isXmlHttpRequest ? "MDWDemoBundle::layout_ajax.html.twig" : "::base.html.twig" %}

De esta forma Twig nos permite comprobar si la petición es AJAX y de este modo tener un layout específico para cada situación.

En el caso de plantillas con PHP, simplemente podemos acceder al objeto Request gracias al contenedor de Inyección de Dependencias (DI) en nuestras vistas:

$this->container->get('request')->isXmlHttpRequest()

Note que se hace una llamada a $this->container esto motivado a que en las plantillas $this->get() intentará cargar los Helpers, con ello especificamos que queremos cargar explícitamente un servicio, en nuestro caso el “Request”.

Esto es todo lo básico que necesitas conocer para implementar AJAX con Symfony 2. ¡Fue muy simple, corto y rápido!, ¿lo querías más difícil? :-D Simplicidad: ése es el objetivo, con esto puedes integrar perfectamente cualquier código JS AJAX, frameworks como jQuery, MooTools, Prototype, ExtJS, Dojo, YUI, etc.

Siguiente capítulo: Integrando jQuery

Maycol AlvarezMaycol Alvarez para Maestros del Web.
Agrega tu comentario | Enlace permanente al artículo

Síguenos en: Twitter @maestros | Facebook Fan page

13 comentarios

Comentarios

  1. javier

    escasito, esta semana.
    con esto puedes integrar perfectamente cualquier código JS AJAX, frameworks como jQuery, MooTools, Prototype, ExtJS, Dojo, YUI, etc.,
    con que?
    perdón, pero una semana esperando para esto, me ha decepcionado.
    Bien por el resto

    1. Precisamente por la amplia gama de FW Javascript que implementan AJAX no contemple la inclusión de un ejemplo concreto, porque de usar jQuery estaría obligando a usar jQuery a usuarios que ni siquiera lo conocen, lo mismo con ExtJS, Dojo y los demás, recordemos que la guía se concentra en “Symfony”.
      Por otro lado hacer un ejemplo con ajax desde 0 (es decir creando el xmlhttprequest) es muy avanzada para principiantes, y está lejos del objetivo de la guía, comprendo que el capítulo es muy corto, pero se enfoca en la parte funcional de “AJAX” de Symfony2, en breve dispondremos de un ejemplo para complementarlo, descuiden que los próximos capítulos (instalando bundles de terceros y seguridad) tienen mucho más contenido y ejemplos reales

  2. Michel

    La verdad es que yo ya sé Symfony2, esperaba reforzar algunas cosas sobre Ajax, Seguridad o Rendimiento desde aquí… Deberían profundizar más este modulo de Ajax, poner ejemplos, buenas prácticas, almenos yo podría colaborar con un ejemplo :p

    Saludos.

    1. Entiendo que el capítulo es realmente corto, en breve dispondremos de un ejemplo para complementarlo, descuiden que los próximos capítulos (instalando bundles de terceros y seguridad) tienen mucho más contenido y ejemplos reales.
      Les recuerdo, como se indicó al principio del artículo que Symfony2 es un FW orientado al desarrollo en el servidor, que no integra ningún FW javascript o AJAX en particular, sólo brinda de las herramientas necesarias para la detección de peticiones AJAX, las cuales son fundamentales para poder refactorizar complementos de la vista para uso de AJAX.

    2. Dario

      Hasta donde tengo entendido Ajax no proporciona seguridad alguna, además ni siquiera en el manual oficial de symfony2 existe un sección dedicada solamente en ajax, me parece que el contenido de este artículo es bastante directo, jamas me hubiese imaginado que desde twig se detectara ajax de esa manera, bien por ti @Maycol :-)

  3. zer0ve

    Gracias por el material, pero a esto le falta muchísimo. Espero que saquen una 2da versión de este tema tan importante y extenso, agregando mas ejemplos, opciones y casos prácticos, si es posible con Jquery o Prototype.

    1. Como se indicó anteriormente ya se está preparando el material extra, lo más probable es que esté disponible el miércoles.
      Recordamos que el manejo de AJAX corresponde al cliente, es decir JavaScript, debido a que Symfony es un FW de desarrollo PHP, de igual forma publicaremos los ejemplos correspondientes al uso de AJAX con Symfony2 y el FW jQuery, gracias por su paciencia.

    2. Dario

      Extenso?, me vas a disculpar pero yo no veo el tema de ajax extenso, de hecho implementar ajax es lo más sencillo del mundo, y más si se usa un framework cómo jquery, además cómo dice maykol symfony es un framework PHP, no entiendo tanto lío cuando se trata de un manual para PHP, solo falta que pidan HTML5 también!

  4. Ya disponible el nuevo capítulo complemento de éste: http://www.maestrosdelweb.com/editorial/curso-symfony-2-integrando-jquery/ Integrando jQuery, gracias por la paciencia.

  5. Daniel

    Excelente Articulo Maycol Alvarez, aunque muchos personas les parecio corto el articulo, creo que no debemos olvidarnos que debemos aprender tambien por nosotros mismos investigando, intentando, hechando a perder. De esa manera seremos más independientes y no nos acostumbraremos a esperar que alguien nos lleve de la mano.

    Gracias!!!!

    1. Bueno, también sirvió para fortalecer el feedback con los usuarios, al final les entregamos unos buenos ejemplos ¿o no :-D ?.
      Otro problema fue la alta expectativa que se generan muchos en cuanto AJAX se refiere, es más simple de lo que parece, AJAX no es un mostruo, cuando lo conozcan bien, verán lo fácil que es de implementarlo ;-) saludos

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.