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.

Também é possível transmitir os dados a exportar usando a variável de template @output em vez da variável json. Se @output estiver definida, ela tem prioridade.

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.