Мне нужна ваша помощь, ребята, мое приложение не может ни удалить, ни обновить. он продолжает выдавать эти ошибки на моих кнопках редактирования и удаления;

(1/1) MethodNotAllowedHttpException
The DELETE method is not supported for this route. Supported methods: GET, HEAD.



(1/1) MethodNotAllowedHttpException
The PUT method is not supported for this route. Supported methods: GET, HEAD.

Это мой маршрут

Route::group(['middleware' => ['role:Admin']], function () {
    Route::resource('/device', 'DeviceController');
});

Это мой клинок для редактирования

<form action="/device" method="POST" id="editForm">
  {{csrf_field()}}
  {{ method_field('PUT') }}

   <div class="col-md-4 mb-3">
   <label>Serial Number</label>
     <input type="text" name="Serial_No" id="" class="form-control"  placeholder="Enter Serial number">
   </div>

  <button class="btn btn-primary" type="submit">Add Data</button>
  <button type="reset" class="btn btn-default float-right">Cancel</button>
   <button type="reset" class="btn btn-default float-middle">Clear</button>
</form>

Это мой клинок удаления

     <form action="/device" method="POST" id="deleteForm">
            {{csrf_field()}}
            {{method_field('DELETE')}}

             <div class="form-row">
             <input type="hidden" name="_method" value="DELETE" >
             <P>Are You Sure!.. You want to delete this Device?</P>
             </div>

       <button class="btn btn-primary " type="submit" >YES! DELETE DEVICE</button>
       <button type="button" class="btn btn-secondary float-right" data-dismiss="modal" >CANCEL</button>

      </form>

Это мой контроллер для удаления

public function destroy($id)
    {
        $devices = Device::find($id);
        $devices -> delete();
        return Redirect::back() -> with('success','Data Deleted Successfully');
    }

Это мой скрипт, который удаляет

<script>
//Start Delete Record

        table.on('click', '.delete', function () {

        $tr = $(this).closest('tr');
        if ($($tr).hasClass('child')) {
          $tr = $tr.prev('.parent');
        }

        var data = table.row($tr).data();
        console.log(data);

        $('#deleteForm').attr('action', '/laptops/'+data[0]);
        $('#deleteModal').modal('show');
        });
        //End Delete Record

      });
</script>
0
MATOVU JOEL CLINTON 12 Апр 2020 в 16:08
1
<form> внутри <form> - не делайте этого. Сделайте их отдельными формами. (И закрыть вторую форму)
 – 
brombeer
12 Апр 2020 в 16:52
Спасибо, но вы не поняли мой вопрос
 – 
MATOVU JOEL CLINTON
12 Апр 2020 в 17:09
1
Существует документация по контроллерам ресурсов и "Действия, обрабатываемые Контроллер ресурсов": доступ к вашему маршруту /device возможен только через GET/POST, в ваших действиях отсутствует фактическое устройство (объект).
 – 
brombeer
12 Апр 2020 в 17:18
Замените action="/device" на action="{{ route(device.add, [$device->id]) }}" и удалите action="{{ route(device.destroy, [$device->id]) }}"
 – 
sta
12 Апр 2020 в 19:01
Это не тренировка
 – 
MATOVU JOEL CLINTON
14 Апр 2020 в 00:30

1 ответ

Вы не выполняете правильные действия

Вместо этого ваша форма обновления должна выглядеть так

<form action="" method="POST" id="editForm">
  {{csrf_field()}}
  {{ method_field('PUT') }}

   <div class="col-md-4 mb-3">
   <label>Serial Number</label>
     <input type="text" name="Serial_No" id="" class="form-control"  placeholder="Enter Serial number">
   </div>

  <button class="btn btn-primary" type="submit">Add Data</button>
  <button type="reset" class="btn btn-default float-right">Cancel</button>
   <button type="reset" class="btn btn-default float-middle">Clear</button>
</form>

Вместо этого ваша форма удаления должна выглядеть так.

<form action="" method="POST" id="deleteForm">
  {{csrf_field()}}
  {{method_field('DELETE')}}

  <div class="form-row">
    <p>Are You Sure!.. You want to delete this Device?</p>
  </div>

  <button class="btn btn-primary " type="submit">YES! DELETE DEVICE</button>
  <button type="button" class="btn btn-secondary float-right" data-dismiss="modal">
    CANCEL
  </button>
</form>

Ваш скрипт должен выглядеть так (измените «ноутбуки/» на «устройство/»)

table.on('click', '.delete', function () {
    $tr = $(this).closest('tr');
    if ($($tr).hasClass('child')) {
          $tr = $tr.prev('.parent');
        }

        var data = table.row($tr).data();
        console.log(data);

        $('#deleteForm').attr('action', '/device/'+data[0]);
        $('#deleteModal').modal('show');
        });

Также, по вашему мнению, вы могли бы использовать множественный маршрут вашего ресурса вместо единственного подхода. то есть /devices вместо /device поэтому в вашем файле маршрутов web.php у вас есть:

Route::group(['middleware' => ['role:Admin']], function () {
    Route::resource('/devices', 'DeviceController');
});

Таким образом, у вас будет более удобный список маршрутов, например:

GET - /devices
GET - /devices/create
POST - /devices/update
GET - /devices/{device}
GET - /devices/{device}/edit
PUT/PATCH - /devices/{device}
DELETE - /devices/{device}

Все это можно просмотреть в вашем cli с помощью php artisan route:list

0
Adedoyin Akande 12 Апр 2020 в 20:46
У меня есть эта ошибка сейчас; Свойство [id] не существует в этом экземпляре коллекции.
 – 
MATOVU JOEL CLINTON
12 Апр 2020 в 20:23
Делал это всеми возможными способами, но не могу понять, что вызывает одни и те же ошибки снова и снова, я должен пригласить вас в свой проект, и вы это увидите
 – 
MATOVU JOEL CLINTON
14 Апр 2020 в 00:38
Хорошо, если это на GitHub, вы можете найти меня здесь github.com/aeadedoyin
 – 
Adedoyin Akande
14 Апр 2020 в 08:14
Привет @adedoyin-akande, я хочу пригласить тебя, и ты поможешь мне с моей проблемой, я даже пытался сделать копию своего проекта на Laravel 7x, но все же я столкнулся с той же ошибкой, что означает, что проблема в пользовательском интерфейсе или скрипте или что-то связанное с этим
 – 
MATOVU JOEL CLINTON
6 Май 2020 в 15:58
Вот мой дескриптор в Твиттере: twitter.com/aeadedoyin.
 – 
Adedoyin Akande
6 Май 2020 в 18:43