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? 😀 Simplicidad: ése es el objetivo, con esto puedes integrar perfectamente cualquier código JS AJAX, frameworks como jQuery, MooTools, Prototype, ExtJS, Dojo, YUI, etc.
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
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.
[…] Integrando AJAX VN:F [1.9.17_1161]please wait…Rating: 0.0/5 (0 votes cast)Hoy se ha publicado el capítulo 11 de la guía de Symfony2 donde @maycolalvarez explica como Symfony nos provee formas de saber cuando […]
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.
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
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
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.
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.
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!
[…] Integrando jQuery VN:F [1.9.17_1161]please wait…Rating: 0.0/5 (0 votes cast)En respuesta al capítulo anterior sobre Ajax hemos preparado unos ejemplos de implementación usando jQuery para el capítulo […]
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.
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!!!!
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