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

Usando o <form> no Livewire na base da improvisação


Frank K Hosaka

Pergunta

Eu tenho uma rotina chamada previsão que funciona no meu notebook, mas lá na Hostinger apareceu uma estranha mensagem "Livewire encountered corrupt data". Passei horas estudando o código, mas não consegui achar o problema.

Na internet encontrei algumas mensagens reclamando que o "wire:model" não funciona adequadamente com o array e alguém sugeriu usar a propriedade protected na variável ao invés do public. Até que eu tentei, mas não funcionou. A minha única saída provisória foi usar o <form>, mas eu só encontrei exemplo usando apenas um <form> e não um monte delas.

Eu improvisei assim:

arquivo resources > views > livewire > lprevisão.blade.php
<?php foreach($painel as $key => $p): ?>
        <div class="flex odd:bg-gray-200">
            <div class="w-[50px] text-right"><?=$p->conta?></div>
            <div class="w-[188px] px-2 truncate"><?=$p->descricao?></div>
            <div class="w-[130px] py-0">
                    <form >
                    <input name='{{$p->conta}}' 
                        class="w-[130px] text-right py-0 border-none" 
                        value='{{dec($p->valor)}}'
                        wire:change="atualizar({{$p->conta}})">
                    </form>
            </div>
            <div class="w-[130px] text-right"><?=dec($p->fim)?></div>
            <div class="w-[130px] text-right">
                <?=dec(abs(round($p->valor - $p->fim + 0.0001,2)))?>
            </div>
        </div>
    <?php endforeach;?>
    

O comando wire:change não funciona como eu esperava, mas ele conseguiu simular o botão "submit", e assim eu consegui jogar no cabeçalho do navegador algo do tipo lteste?112=70. 112 é o número da conta que usei para dar o nome ao <input> e 70 é o número que eu digitei no <input>. Como o comando wire:change não funciona, a minha pergunta foi: e agora, como faço para pegar o número que eu digitei?

A minha intuição mandou pegar a função mount( ) no componente, assim:

arquivo app > Livewire > Lprevisao.php
<?php
//...
function mount() {
        if(request()->input()){
            foreach(request()->input() as $conta => $valor){}
            $valor=deca($valor);
            tbprevisao::where('conta',$conta)->update(['valor'=>$valor]);
        }
        $balancete = new Lbalancete();
        $balancete->tbw(new Request(['opcao'=>1]));
        $this->mercado=tbmercado::all();
        $this->total = DB::table('tbmercado')->select(
            DB::raw('SUM(venda) as tvenda'), DB::raw('SUM(tarifa) as ttarifa'),
            DB::raw('SUM(conta) as tconta'))->first();
        $this->painel=DB::table('tbprevisao')->join('tbw', 'tbprevisao.conta', '=', 'tbw.conta')
            ->orderBy('tbprevisao.conta')->get();
    }

E aqui é só gambiarra, usei o mount( ) como uma espécie de roteador, ele pega o conteúdo do cabeçalho pelo request()->input(), depois joga a chave na variável $conta e o conteúdo na variável $valor através do comando foreach( ) que não faz absolutamente nada { }, mas consegue pegar o conteúdo do cabeçalho e jogar nas variáveis. Isso é um péssimo exemplo de programação.

A ideia deu certo lá no Hostinger, mas o Livewire não foi feito para usar o <form>, mas a gambiarra deu certo. A mágica do Livewire está no componente wire:model, fazer isso funcionar com o array que é o problema.
 

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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