Método Delete dentro de um modal

1 resposta Resolvido
laravel
scheleder

No projeto tenho um botão que exclui um agendamento, funciona perfeitamente.
Então resolvi aprimorar adicionando uma janela modal para confirmação.
consegui passar os parâmetros para o modal para poder realizar a exclusão.
Ocorre que agora aparece o erro:
“The POST method is not supported for this route. Supported methods: DELETE.”

código:

<button type="button" class="btn btn-sm btn-danger" onclick="setaDadosModal('/schedules/{{ $schedule->id }}')" data-toggle="modal" data-target="#deleteModal">Deleta</button>

<div class="modal fade" id="deleteModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog modal-dialog-centered" role="document">
    <div class="modal-content">
      <div class="modal-body">
        <h5>Confirma a exclusão?</h5>  
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Cancelar</button>
        <form name="link" action="" method="POST">
            @csrf
            @method('DELETE')
            <button type="submit" class="btn btn-danger">Excluir</button>
        </form>
      </div>
    </div>
  </div>
</div>

<script>
    function setaDadosModal(valor) {
    document.link.action = valor;
    }
</script>

Alguém pode me dar uma luz?

1 Resposta

scheleder
Solucao aceita

Consegui resolver.
Criei um arquivo no blade para o layout.

<div class="modal" id="confirmation-modal" tabindex="-1" role="dialog" aria-labelledby="confirmation-modal-label" aria-hidden="true">
    <div class="modal-dialog modal-dialog-centered">
        <div class="modal-content">
            <div class="modal-header">
                <h4>{{ $headerText }}</h4>
            </div>
            <div class="modal-body">
                {{ $bodyText }}
                
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-dismiss="modal">Cancelar</button>
                <form action="" method="POST" style="display:inline">
                {{ csrf_field() }}
                {{ method_field($verb) }}    
                    <input type="submit" class="btn btn-danger btn-ok" value="{{ $confirmButtonText }}" />
                </form>
            </div>
        </div>
    </div>
</div>

<script>
                $('#confirmation-modal').on('show.bs.modal', function(e) {
                    href = $(e.relatedTarget).data('href')

                    // change href of button to corresponding target
                    $(this).find('form').attr('action', href)
                    //$(this).find('.modal-footer input').val(href)
                })
            </script>

Inclue o layout na view:

@include('layouts.confirmation_modal', ['headerText' => 'Excluir Agendamento', 'bodyText' => 'Confirma a exclusão?', 'confirmButtonText' => 'Excluir', 'verb' => 'DELETE'])

Chama o modal:

<a data-href="/schedules/{{$schedule->id}}" data-toggle="modal" data-target="#confirmation-modal" class="btn btn-sm btn-danger">Excluir</a>
Criado 29 de setembro de 2022
Ultima resposta 29 de set. de 2022
Respostas 1
Participantes 1