Ir para conteúdo
Fórum Script Brasil
  • 0

O curioso caso do json no Laravel [Resolvido]


Frank K Hosaka

Pergunta

Eu tenho um arquivo chamado helpers.php no Laravel, onde defini a função apuração:

function apuracao ( )
{
	$array = ['teste'=>14];
	return json_decode(json_encode($array));
}

Mas na hora que preciso dele no controlador, ele não funciona quando executo dd($array->teste); o Laravel reclama que estou tentando pegar um atributo de um array.

Depois de várias tentativas e erros, acredito que você só pode usar a função json dentro do controlador, mas não pode passar o valor dele para frente através de um return.

Claro que é bem possível que o erro seja só meu, mas depois de quatro horas de tentativa, pedi para o arquivo helpers.php só mandar o array, e eu converto o array em json só lá no controlador.

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 1

Se você quer trabalhar com arrays associativos, você pode modificar a chamada json_decode para receber um segundo argumento true, o que força a função a retornar um array associativo em vez de um objeto:

 

function apuracao() {
    $array = ['teste' => 14];
    return json_decode(json_encode($array), true);
}



Uso:

$array = apuracao();
dd($array->teste);

 

Link para o comentário
Compartilhar em outros sites

  • 0

Só olhei a documentação, não cheguei a testar. Mas uso Laravel

Então voce pode usar collections

https://laravel.com/docs/10.x/collections

Para o que você precisa collect
https://laravel.com/docs/10.x/collections#method-collect

function apuracao() {
    $array = ['teste' => 14];
    return collect($array);
}

$apuracao = apuracao();
$valorTeste = $apuracao['teste']; // Ou $apuracao->get('teste');

Mas se mesmo assim quiser acessar como objeto:

$apuracao = apuracao();
$json = $apuracao->toJson();

Agora $json é uma string JSON representando a coleção.


de uma olhada no metodo put

https://laravel.com/docs/10.x/collections#method-put
 

$collection = collect([]);
 
$collection->put('teste, 14);
 
$collection->all();

Em fim da pra brincar com muita coisa

 

Link para o comentário
Compartilhar em outros sites

  • 0

Consegui achar a solução!

Arquivo app / Helpers.php
function apuracao($dia)
{
	$mesVetor=['Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho',
		'Agosto','Setembro','Outubro','Novembro','Dezembro'];
	$ano=date('Y',strtotime($dia));
	$mes=date('m',strtotime($dia));
	$apuracao=$mesVetor[$mes-1] . " de $ano";
	$primeiroDia="$ano-$mes-01";
	$ultimoDia=date('Y-m-t',strtotime($primeiroDia));
	return (object)[
			'apuracao'=>$apuracao,
			'primeiroDia'=>$primeiroDia,
			'ultimoDia'=>$ultimoDia];
}

arquivo app / Http / Controllers / TesteController.php
<?php
namespace App\Http\Controllers;

Class TesteController Extends Controller
{
    public function inicio()
    {
        dd(apuracao('2024-03-07')->apuracao);
    }
}

Arquivo routes / web.php
<?php
use Illuminate\Support\Facades\Route;

Route::get('teste',[App\Http\Controllers\TesteController::class,'inicio']);
	


 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...