Detectar Peticiones AJAX en PHP, Symfony o Twig

Detectar peticiones AJAX

Suele ser habitual recibir peticiones ajax o http a los mismos ficheros o acciones. Lo normal es que la única diferencia sea en el formato de los datos devueltos o en la vista usada. Por dicho motivo necesitamos un método para identificar si la petición nos ha llegado por AJAX o no de modo que no necesitemos repetir nuestro código. Veremos varias formas de detectar esto:

PHP Plano

Para detectar si una llamada es AJAX en php podemos valernos de la variable global $_SERVER:

Cabe destacar que este método se puede hackear por lo que no debemos usarlo como medida de seguridad o al menos, no como la única medida.

Con Symfony

Obviamente con Symfony es mucho más sencillo y solo tenemos que acudir a la variable Request dentro de nuestro Controlador:

En este ejemplo servimos vistas distintas con formatos distintos, pero podríamos hacer cualquier tipo de acción.

Dentro de una plantilla twig en Symfony

En muchas ocasiones el formato en el que queremos los datos es el mismo (html) solo que al llamar por ajax no queremos todo el html entero si no solo la parte correspondiente calculada por dicha acción. Para esto podemos crear dos layouts: uno de ellos (base.html.twig) lo usaremos para generar nuestras páginas completas y otro (ajax.html.twig) para las llamadas ajax.

Dentro de nuestra plantilla twig extenderemos de una u otra en función de si la llamada es ajax o no:

Conclusión

Con este sencillo truco reutilizamos toda la lógica del controlador y variamos el formato de salida (o la vista) en función del tipo de llamada. Gracias a este tipo de técnicas podemos cumplir con (algunos) de los requisitos DRY.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *