Vista JSON
1Presentación
Cada vez más sitios web se alejan del modelo estático clásico según el cual cada interacción provoca una recarga de la página. Hoy en día, las aplicaciones web contienen código JavaScript que se comunica con el servidor mediante la tecnología AJAX.
Concretamente, el código JavaScript envía peticiones al servidor (a menudo usando una biblioteca como jQuery), que a su vez envía un flujo de datos serializado en JSON fácilmente utilizable por la aplicación cliente.
2Uso
Imagina un fragmento de código JavaScript que enviara información al servidor, y usara los datos devueltos para modificar la página HTML. En el siguiente ejemplo, usamos la biblioteca jQuery para la conexión con el servidor y la manipulación del HTML:
// definición de la URL de conexión, incluyendo un parámetro
var url = "/api/getUser/" + userId;
// envío de la petición
$.getJSON(url, function(response) {
// procesamiento
if (!response) {
// error de comunicación
alert("Communication error.");
} else {
// escribimos el nombre del usuario en un DIV
$("#div-username").html(response.name);
}
});
Esta petición podría ser gestionada por un controlador que difiere muy poco de los controladores habituales:
class ApiController extends \Temma\Web\Controller {
public function getUser(int $id) {
// registro de los datos que se enviarán
// en el flujo JSON
$this['json'] = [
'name' => 'Albert Einstein',
'type' => 'genius',
];
// definición de la vista utilizada
$this->_view('\Temma\Views\Json');
}
}
- Líneas 5 a 8 : Los datos que se enviarán en el flujo JSON se definen asignándolos a la variable json.
- Línea 11 : Especificamos que la vista que se usará para los datos salientes es la vista JSON (y no la vista Smarty habitual).
Nota: la vista JSON obviamente no necesita plantillas, ya que son los datos PHP los que se serializan directamente.
3Descarga
Si quieres que el feed JSON se envíe como un archivo adjunto descargable, define una variable de plantilla llamada filename, que contenga el nombre del archivo.
Ejemplo:
$this['filename'] = 'export.json';
4Modo debug
Por defecto, el flujo JSON generado es lo más compacto posible, serializado en una sola línea.
En cambio, si una variable de plantilla llamada jsonDebug se define con el valor true, el flujo JSON generado contendrá saltos de línea y sangrías para facilitar su lectura.