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

Hoje eu aprendi o que é $this->


Frank K Hosaka

Pergunta

Hoje eu criei uma classe assim:

primeiro.app.Http.Livewire.ShowHideComponent.php
<?php
namespace App\Http\Livewire;
use Livewire\Component;

class ShowHideComponent extends Component
{
	public $showDiv=false;
	public function plano($conta){$showDiv=true;}
}

A mensagem que eu recebi do Laravel é que a variável $showDiv não estava definida. Fiquei 5 horas pesquisando o Google e não achei a solução. Então, por tentativa e erro, eu mudei a variável $showDiv para $this->showDiv, e assim o programa funcionou. Ou seja, não basta definir a variável no topo da lista que as funções abaixo não vão conseguir trabalhar com ele se você não usar o token $this->

Além de aprender a usar o token $this-> eu também aprendi a fazer um modal bem simples sem o JavaScript. O JavaScript funciona em qualquer página HTML, mas no meu caso eu queria pegar o JavaScript num repositório. O Laravel tem centenas de repositórios, mas eu não consegui carregar o arquivo .js no meu HTML. Assim, eu decidi estudar o componente ShowHIdeComponent do Livewire com esse tutorial: Laravel Livewire Show and Hide Div Example (larainfo.com)

Eu cai na besteira de mudar o nome da classe e do blade, e o Laravel ficou só mandando mensagens de erro. Levei mais 5 horas para consertar a besteira que eu fiz.

Depois de mais 5 horas na base da tentativa e erro, consegui montar dois <input>, o primeiro recebe a Conta Devedora, e o segundo recebe a Conta Credora, que é selecionado num Plano de Contas que aparece assim que você clica no <input>. O código ficou assim:

primeiro > app > Http > Controllers > aStudyController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;

class aStudyController extends Controller 
{
public function index(){return view('astudy');}
}
------
primeiro > app > Http > Livewire > ShowHideComponent.php
<?php
namespace App\Http\Livewire;
use Livewire\Component;

class ShowHideComponent extends Component
{
    public $showDiv=false;
    public $contaD=null;
    public $contaC=null;
    public $contaInput=null;
    public function render(){return view('livewire.show-hide-component');}
    public function plano($conta){$this->contaInput=$conta;$this->showDiv=true;}
    public function selec($conta){
        if($this->contaInput=='contaD'){$this->contaD=$conta;}
        if($this->contaInput=='contaC'){$this->contaC=$conta;}
    }
}
------
primeiro > resources > views > livewire > show-hide-component.blade.php
<div>
 <table>
 <tr><td>ContaD <input wire:click=plano('contaD') wire:model='contaD' name=contaD>
 <tr><td>ContaC <input wire:click=plano('contaC') wire:model='contaC' name=contaC>
 </table>
@if($showDiv)
<div wire:click=$toggle('showDiv')>
 <table>
 <tr><td><a wire:click=selec(1000)>1000 Ativo</a>
 <tr><td><a wire:click=selec(2000)>2000 Passivo</a>
 <tr><td><a wire:click=selec(3000)>3000 Receita</a>
 <tr><td><a wire:click=selec(4000)>4000 Despesa</a>
</div>
@endif
</div>
------
primeiro > resources > views > astudy.blade.php
<form>
@livewireStyles
@livewireScripts
<livewire:show-hide-component>
<input type=submit>
</form>
-----
primeiro > routes > web.php
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\aStudyController;
use App\Http\Controllers\diarioController;
Route::get('/astudy',[aStudyController::class,'index']);

 

Sem título.png

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Depois de 12 horas de tentativa e erro, eu conseguir colocar o Eloquent dentro do Livewire do Laravel, mas ainda falta diminuir a fonte do plano de contas e dividir em duas páginas:

primeiro > app > Http > Livewire > ShowHideComponent.php
<?php
namespace App\Http\Livewire;
use Livewire\Component;
use App\Models\tbconta;

class ShowHideComponent extends Component
{
    public $showDiv=false;
    public $contaD=null;
    public $contaC=null;
    public $contas=null;
    public $descricaoD=null;
    public $descricaoC=null;
    public $contaInput=null;
    public function render(){return view('livewire.show-hide-component');}
    public function mount(){$this->contas=tbconta::select('conta','descricao')->get()->toarray();}
    public function plano($conta){$this->contaInput=$conta;$this->showDiv=true;}
    public function selec($chave){
        if($this->contaInput=='contaD'){
            $this->contaD=$this->contas[$chave]['conta'];
            $this->descricaoD=$this->contas[$chave]['descricao'];}
        if($this->contaInput=='contaC'){
            $this->contaC=$this->contas[$chave]['conta'];
            $this->descricaoC=$this->contas[$chave]['descricao'];
        }
    }
}
------
primeiro > resources > views > livewire > show-hide-component.blade.php
<div>
 <table>
 <tr><td>ContaD <input wire:click=plano('contaD') wire:model='contaD' name=contaD size=1>
 <td><a>{{$descricaoD}}</a>
 <tr><td>ContaC <input wire:click=plano('contaC') wire:model='contaC' name=contaC size=1>
 <td><a>{{$descricaoC}}</a>
 </table>
@if($showDiv)
<div wire:click=$toggle('showDiv')>
 <table>
 @foreach($contas as $chave => $cta)
 <tr><td><a wire:click=selec({{$chave}})>{{$cta['conta']}} {{$cta['descricao']}}</a>
 @endforeach
</div>
@endif
</div>

 

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,3k
    • Posts
      652,5k
×
×
  • Criar Novo...