1
resposta

Dois Botões submits com rotas diferentes e mesmo formulário

Tela contendo dois botões submitsTenho um cenário onde numa tela tenho dois botões com responsabilidades diferentes, ambos tratam-se de método: POST para atualização de banco de dados. O botão salvar salva os dados do formulário na tabela. O botão gerar, precisa gerar alguns arquivos dentro da minha aplicação. Não consegui imaginar uma solução para ter dois botões de submit no mesmo formulário.

Segue o código na View:

<form action="{{ route('tabela.save', ['tabela' => $tabela]) }}" method="post">
        @csrf
        <div class="row">
            <div class="form-group col-6 col-sm-4 col-lg-3">
                <label class="col-form-label col-form-label-sm"><b>Nome Tabela:</b></label>
                <div class="form-control form-control-sm form-control-plaintext">
                    {{ $tabela->descricao }}
                </div>
            </div><!-- FIM FORM-GROUP -->

            <div class="form-group col-6 col-sm-4 col-lg-3" data-toggle="tooltip" data-placement="top" title="explicação">
                <label class="col-form-label col-form-label-sm"><b>Modelo de Geracao:</b></label>
                <select  name="tipo_operacao" id="tipo_operacao" class="form-select form-select-sm">
                    <option value="1"{{ $tabela->tipo_operacao == 1 ? 'selected' : '' }}>Tela de Cadastro s/ filtro</option>
                    <option value="2"{{ $tabela->tipo_operacao == 2 ? 'selected' : '' }}>Tela de cadastro c/ filtro</option>
                </select>
            </div><!-- FIM FORM-GROUP -->
        </div><!-- FIM ROW -->
        <div class="d-grid gap-2 d-md-flex justify-content-md-end mt-2">
            <a href="{{ route('tabela.index', ['projeto' => $tabela->projeto]) }}" class="btn btn-sm btn-outline-secondary">
                Voltar
            </a>
            <button class="btn btn-sm btn-success">
                Gerar Romaneio
            </button>
            <button class="btn btn-sm btn-primary">
                Salvar
            </button>
        </div><!-- FIM GRID -->
    </form>
1 resposta

Boa tarde Leandro, tudo bem?

Pelo que entendi, você quer receber os dados do formulário em ambas ações, correto?

Se for isso, você não precisa fazer um submit, mas terá que recorrer ao JS para realizar a "compilação" do seu formulário por meio de um método chamado "serialize". Assim, você ainda poderá ter um método submit e outra função JS que seja acionada ao executar a ação escolhida e enviar os dados (após serem "serializados") para o seu Controller.

Talvez esse link possa ser útil: https://pt.stackoverflow.com/questions/287393/serialize-com-javascript-puro

Espero ter ajudado, abraço!