此路线不支持DELETE&PUT方法。支持的方法:GET,HEAD,POST

问题描述 投票:0回答:1

我需要您的帮助,我的应用无法删除,也无法更新。它会不断在我的编辑和删除按钮上弹出这些错误;

(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>
php laravel laravel-5.8
1个回答
0
投票

您未通过正确的操作

您的更新表单应该看起来像这样

<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>

您的脚本应如下所示(将“ laptops /”更改为“ device /”)

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}

可以使用php artisan route:list在您的cli中查看所有这些>

© www.soinside.com 2019 - 2024. All rights reserved.