Visão JSON
1Apresentação
Cada vez mais sites estão se afastando do modelo estático clássico, segundo o qual cada interação leva a uma atualização da página. Hoje em dia, as aplicações web contêm código JavaScript que se comunica com o servidor por meio da tecnologia AJAX.
Concretamente, o código JavaScript envia requisições ao servidor (geralmente usando uma biblioteca como o jQuery), que em troca envia um fluxo de dados serializado em JSON, facilmente utilizável pela aplicação cliente.
2Uso
Imagine um trecho de código JavaScript que enviaria informações ao servidor, e usaria os dados retornados para modificar a página HTML. No exemplo a seguir, estamos usando a biblioteca jQuery para a conexão com o servidor e a manipulação do HTML:
// definição da URL de conexão, informando um parâmetro
var url = "/api/getUser/" + userId;
// envia a requisição
$.getJSON(url, function(response) {
// processamento
if (!response) {
// erro de comunicação
alert("Communication error.");
} else {
// escrevemos o nome do usuário em uma DIV
$("#div-username").html(response.name);
}
});
Essa requisição poderia ser tratada por um controlador que difere muito pouco dos controladores usuais:
class ApiController extends \Temma\Web\Controller {
public function getUser(int $id) {
// gravação dos dados que serão enviados
// no fluxo JSON
$this['json'] = [
'name' => 'Albert Einstein',
'type' => 'genius',
];
// define a visão usada
$this->_view('\Temma\Views\Json');
}
}
- Linhas 5 a 8 : Os dados a serem enviados no fluxo JSON são definidos ao serem atribuídos à variável json.
- Linha 11 : Especificamos que a visão a ser usada para os dados de saída é a visão JSON (e não a visão Smarty usual).
Observação: A visão JSON obviamente não precisa de templates, já que são os dados PHP que são diretamente serializados.
3Download
Se você quiser que o feed JSON seja enviado como um anexo para download, defina uma variável de template chamada filename, contendo o nome do arquivo.
Exemplo:
$this['filename'] = 'export.json';
4Modo debug
Por padrão, o fluxo JSON gerado é o mais compacto possível, serializado em uma única linha.
Porém, se uma variável de template chamada jsonDebug for definida como true, o fluxo JSON gerado conterá quebras de linha e indentações para facilitar a leitura.