Xóa Task

Lượt xem: 2503

Xóa Task

1. Thêm button xóa

Chúng ta đã để lại chữ “TODO” chú ý trong code nơi chúng ta sẽ thêm nút xóa vào. Vì vậy hãy thêm một nút xóa vào mỗi dòng của danh sách task trong task.blade.php view. Chúng ta sẽ tạo một form nhỏ chứa 1 button xóa cho mỗi task trong danh sách task. Khi button được clicked, một yêu cầu DELETE /task sẽ gửi tới dứng dụng:


 <tr>
     <!-- Task Name -->
    <td class="table-text">
        <div>{{ $task->name }} </div>
    </td>

    <!-- Delete Button -->
   <td>
       <form action="/task/{{ $task->id }}" method="POST">
            {{ csrf_field() }}
            {{ method_field('DELETE') }}

           <button>Delete Task </button>
        </form>
     </td>
 </tr>


2. Lưu ý về phương pháp giả mạo (method Spoofing

Lưu ý phương thức của form chứa button xóa được liệt kê là POST, mặc dù chúng ta đang ứng tới yêu cầu đang sử dụng một route Route::delete. Các form HTML chỉ cho phép các động từ HTTP GET POST, vì vậy chúng ta cần tạo một cách để giả mạo một yêu cầu xóa từ form.

Chúng ta có thể giải mạo một yêu cầu xóa (DELETE) bằng cách kết xuất kết quả của hàm method_field(‘DELETE’) trong form. Hàm này tạo ra một đầu vào dạng ẩn (hidden) mà Laravel nhân ra và sử dụng để ghi đè phương thức yêu cầu HTTP thực tế. Trường được tạo ra sẽ trông như sau:
 

<input type="hidden" name="_method" value="DELETE">

3. Xóa Task

Cuối cùng, hãy thêm logic vào route để thực sự xóa tác vụ đã có. Chúng ta có thể sử dụng phương thức Eloquent findOrFail để try xuất một model bở ID hoặc ném ra ngoại lệ 404 nếu model không tồn tại. Khi chúng ta truy xuất vào model, chúng ta sử dụng hàm delete để xóa bản ghi. Khi bạn khi được xóa, chúng ta sẽ chuyển người dùng trở lại / URL.

 


Route::delete('/task/{id}', function ($id) {
    Task::findOrFail($id)->delete();

    return redirect('/');
});