Requisitos para JSON saída
Pergunta
Eu não sou realmente certo o que é necessário para fazer uma ação de retorno json.
Tenho certeza de que existe mais de uma maneira de pele este gato, mas eu não tenho certeza do que é absolutamente necessário.
É adequado para apenas us $this->render(array('json' => compacto('dados'));?
Eu preciso adicionar uma rota especificando sua json?
Preciso também de adicionar o tipo de mídia application/json?
Eu também precisamos adicionar a predefinição de layout default.json.php?
Preciso também de adicionar o visualizar action.json.php?
Notas:Eu quero qualquer arbitrário de url:www.mysite.com/Controller/Action para sempre retornar json.
Eu gostaria de ser capaz de especificar o tipo de retorno na minha ação SÓ (ou seja, processar tipo).
Solução
Acontece que nada no op é necessário outro, em seguida, essa linha quando você retornar os dados, na parte inferior do controlador de ação:
return $this->render(array('json' => $data = array(), 'status'=> 200));
Algumas coisas que deve ser observado é que os dados retornados de um conjunto de registros é realmente feio.Os usuários devem fazer um $recordset->a('matriz') em primeiro lugar.Não sei por que, mas a('json') acaba de escapar de todas as citações, o que torna a seqüência de caracteres json realmente funky.
Outras dicas
Retornar o JSON é mais fácil do que você imagina.Recentemente, eu fiz isso e foi surpreendido
Eu apenas mostrei a você por me referindo ao jogo estou a desenvolver - https://github.com/BitAlchemists/Elenears-Erben/blob/master/app/controllers/MapsController.php
public function view()
{
$gameId = $this->request->params['id'];
if($gameId == null)
{
return new Response();
}
$xSize = 10;
$ySize = 10;
$fields = Maps::first(array('game_id' => $gameId))->fields;
return compact('xSize', 'ySize', 'fields');
}
Lá vai:Você acabou de preparar os dados e retorná-lo.A magia é feita pelo Media
de classe.Eu não sei se você tiver que adicionar Media.php para Bootstrap.php, apenas experimentá-lo.
Eu acho que a explicação é, que você não tem que fornecer um modo de exibição ou qualquer coisa, porque o Lítio já sabe como presente JSON.Ele também ensina algo que o controlador deve realmente fazer, porque se você fosse escrever um modo de exibição para a mesma ação, seria precisa basicamente os mesmos dados.
Cheers