Итак, мое простое уничтожение не работает, что мне не хватает?

avatar
El conde Lucanor
8 августа 2021 в 20:23
53
1
-1

Я пытаюсь выполнить самое простое уничтожение в Laravel с небольшим модальным окном, но всегда появляется ошибка 404.

Я просто делаю 2 части, индекс и PostController, больше ничего:

index (Кнопка)

<button data-toggle="modal" data-target="#deleteModal" data-id="{{ $post->id }}" class="btn btn-danger"> Delete</button>

index (модальный DIV и скрипт)

<div class="modal fade" id="deleteModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="modalLabel"></h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>

      <div class="modal-body">
        <p>Are you sure to delete this?</p>
      </div>
        
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <form method="POST" action="{{ route('post.destroy', 0) }}">
          @method('DELETE')
          @csrf
          <button type="submit" class="btn btn-danger">Delete</button>
        </form>
      </div>
    </div>
  </div>
</div>

<script>
  window.onload = function() {
    $('#deleteModal').on('show.bs.modal', function (event) {
    var button = $(event.relatedTarget)
    var id = button.data('id')
    var modal = $(this)
    modal.find('.modal-title').text('You're going to delete the POST:  ' + id)
  })
  }
</script>

PostController

public function destroy($id)
{
    $post = Post::findOrFail($id);

    $post->delete();

    return back()->with('status', '¡Post deleted!');
}
Источник

Ответы (1)

avatar
Arleigh Hix
8 августа 2021 в 20:55
2

Я считаю, что второй параметр вспомогательного метода route должен быть массивом, тогда как у вас есть целое число 0.

Возможно, вы хотите сделать что-то вроде этого:

<form method="POST" action="{{ route('post.destroy', ['id' => $post->id]) }}">

(извините, если синтаксис неправильный, я больше разбираюсь в symfony/twig, чем в laravel/blade)

El conde Lucanor
8 августа 2021 в 21:55
1

Теперь он удаляет последний пост из списка, странно :S Если я удаляю 4-й пост, он удаляет всегда последний (у меня было 10 постов, и я знаю 6, но 4-й все еще там)

Arleigh Hix
8 августа 2021 в 22:03
2

Я считаю, что с этим методом вам понадобится отдельный модальный режим для каждого, или вам нужно изменить действие с помощью javascript (передача идентификатора в поле формы может быть проще) в любом случае, это был бы другой вопрос. Мое решение, кажется, решило вашу ошибку 404, верно?