Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Por que o Laravel exibe um json ao retornar um array no Controller?

Caso eu retorne um array em meu Controller no Laravel, um json é exibido ao acessar a rota em questão? Onde está essa configuração? Consigo mudar isso?

5 respostas

Qual o tipo de saída que você gostaria que fosse exibida?

Só para tentar antecipar algo. Se sua intenção é retornar o array para a declaração da rota, você teria que fazer algo do tipo:

No controller:

public function teste() {
        return [10, 20 ,30];
}

Na rota:

Route::get('/projeto/teste/', function() {
    $controller = new \Projeto\Http\Controllers\TesteController();

    $array = $controller->teste();

    //fazer algo com o $array...

});

Caso sua rota esteja declarada como:

 Route::get('/projeto/teste/', 'TesteController@teste')

Sera encaminhada para a response http o dado retornado. Se foi um array, então um objeto json será retornado, creio que não tenha saída mais legível que esta.

É só por curiosidade mesmo. Não tenho nenhuma necessidade diferente não.

Onde esta configuração fica definida, dizendo que é pra exibir como json?

Achei até interessante, mas inesperado...

solução!

Entendi, realmente é curioso. rs

Tentei pesquisar, mas também não encontrei nenhuma informação de onde ele, implicitamente, configura a Response HTTP com application/json e retorna os dados transformados de vetor ou objeto stdClass para json.

Acredito eu que, implicitamente, ele delegue essa transformação do dado para a classe Response. Que por sua vez faz uso da função json_encode() do php.

https://laravel.com/docs/5.3/responses#json-responses

Vou deixar a questão aberta pra ver se alguém encontra, porque eu também procurei e não encontrei nada.

Caso ninguém responda aqui, marco a sua como solucionadora, Rafael!

Muito obrigado pela ajuda.

O que eu encontrei foi a possibilidade do Laravel retornar responses diferentes de Json, mas o conteúdo deve ser gerado manualmente, depois utilizado o código abaixo:

return response($content)
            ->header('Content-Type', $type)

Assim, se necessário for, dá para retornar XML, ou PlainText