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.