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

Laravel: mandando um monte de variáveis do controller para o view


Frank K Hosaka

Pergunta

Para resolver esse problema eu inventei uma classe chamada vr dentro da pasta Controllers do Laravel. Ficou esquisito, mas ele funcionou.

Mas hoje eu senti um enorme peso na consciência e fiz um teste com PHP e eu vi que a maneira mais elegante de passar um monte de variáveis do Controller para um view é usando um vetor, assim:

<?php
$vr['nome']='Frank';
$vr['idade']=64;
$vr['cidade']='Diadema';
$vr['cadastro']=date('Y-m-d');
var_dump($vr);

 

Captura de tela 2023-11-11 215513.png

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 1

No laravel, na controller, voce faz uma renderizacao de uma view. Isso quer dizer que, o "final" da execucao de um metodo da controller é voce chamar o `render()` passando uma view. Ali no render, voce pode appendar no final um outro metodo em que passa as variaveis.

Assim, a controller fica:

<?php

class IndexController extends Controller {
  
    public function index(): View
    {
        $data['nome'] = 'Pedro';
        $data['idade'] = 37;
        $data['valor'] = 25.2;
        $data['notas'] = [
            'q1' => 8,
            'q2' => 7,
            'q3' => 9,
            'q4' => 10,
        ];
        return view('nome_do_arquivo_da_view')->with($data);
    }
  
}

Dessa forma, a controller fica organizada, e passa o array inteiro para a view. Mas, tem que lembrar que, fazendo dessa forma, ao chegar na view, as variaveis se tornam independentes, isso é, se na controller chama $data['nome'] na view vai se chamar apenas $nome.

E voce pode fazer assim na view:

<div class="row">
  <label>Nome</label>
  <p>{{ $nome }}</p>
</div>
<div class="row">
  <label>Idade</label>
  <p>{{ $idade }}</p>
</div>
<div class="row">
  <label>Valor</label>
  <p>{{ money_format($valor) }}</p>
</div>
<div class="row">
  <label>Media das notas dos bimestres</label>
  <p>{{ (($q1 + $q2 + $q3 + $q4) / 4) }}</p>
</div>

Lembrando que essa sintaxe ai é se voce estiver usando o Blade como view manager, e lembrando que o exemplo é meramente didatico. A boa pratica diz que a Media, por exemplo, deve ser calculada na Controller e na view voce só exibe o resultado. Mas foi só pra entender como usar as variaveis na view.

Link para o comentário
Compartilhar em outros sites

  • 0

Não consegui executar o código do ikkinet, eu fiz as seguintes modificações:

arquivo routes>web.php
<?php
use Illuminate\Support\Facades\Route;
Route::get('/',[App\Http\Controllers\IndexController::class,'index']);

arquivo app>Http>Controllers>IndexController.php
<?php
namespace App\Http\Controllers;
class IndexController extends Controller {
    public function index(){   // tirei :view da versão original
        $data['nome'] = 'Pedro';
        $data['idade'] = 37;
        $data['valor'] = 25.2;
        $data['notas'] = ['q1' => 8,'q2' => 7,'q3' => 9,'q4' => 10];
        return view('nome_do_arquivo_da_view',compact('data'));}} 
		// tirei ->with($data) do original


arquivo resources > views > nome_do_arquivo_da_view.blade.php
<div class="row">
  <label>Nome</label>
  <p>{{ $data['nome'] }}</p>
</div>
<div class="row">
  <label>Idade</label>
  <p>{{ $data['idade'] }}</p>
</div>
<div class="row">
  <label>Valor</label>
  <p>{{ $data['valor'] }}</p>
</div>
<div class="row">
  <label>Media das notas dos bimestres</label>
  <p>{{ ($data['notas']['q1']+$data['notas']['q2']+
	$data['notas']['q3']+$data['notas']['q4'])/4 }}</p>
</div>
<!-- a minha versão do laravel é básica, eu nem consegui instalar o Breezer.
 Ele não permite usar a chave de um array como se fosse uma variável. -->

Desconfio que o ikkinet tem uma versão bem mais poderosa do Laravel ou ele está bebemorando 2024 muito antes das datas previstas.

Seja como for, fiz um teste, eu tirei compact('data') no código do controller, e o Laravel reclamou que tem um monte de variável indefinida e isso não faz o menor sentido. O que o Laravel fez com a classe IndexController onde foi definida a variável $data? Isso é um bom exemplo de que eu fiz a coisa errada. O Laravel não ensina ninguém a criar um MVC, pois o Laravel é um MVC, mas um MVC bem obscuro. No MVC a gente chama um arquivo para mostrar no navegador, já o Laravel "renderiza", ou seja, ele mostra o arquivo no navegador e some com o controlador que chamou o arquivo. O nome disso é "mágica"!

Editado por Frank K Hosaka
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...