Laravel8删除数据报错:当前路由不支持DELETE方法
报错原因
Laravel 资源路由(resource)的删除接口匹配规则为 接收DELETE方法请求,路径为/datasekolah/datasiswa/{资源ID}。你当前视图中的删除表单action属性仅填写了/datasekolah/datasiswa,没有携带待删除数据的ID参数,这个路径对应的资源根路由仅支持GET、HEAD、POST三种方法(分别对应列表渲染、新增数据提交逻辑),根本匹配不到需要携带ID的DELETE销毁路由,因此框架抛出方法不支持的报错。
修复方案
- 修正删除表单的action地址,拼接上当前遍历行对应的数据ID,同时补全原来空href的编辑按钮链接,参考代码如下:
{{-- 注意:$item为循环输出列表时的单条数据变量,根据你实际代码里的循环变量名替换即可 --}} <a href="/datasekolah/datasiswa/{{ $item->id }}/edit" class="badge bg-info"> <span class="bi bi-pencil-square"></span> </a> <form action="/datasekolah/datasiswa/{{ $item->id }}" method="post" class="d-inline"> @csrf @method('DELETE') <button class="badge bg-danger border-0" onclick="return confirm('Are you sure?')"> <span class="bi bi-trash"></span> </button> </form>
- 不想硬编码路径的话,可以用路由助手函数生成地址,容错率更高。先执行
php artisan route:list确认资源路由的命名规则,默认命名规则下删除路由的写法为action="{{ route('datasiswa.destroy', $item->id) }}"。 - (可选优化)控制器destroy方法已经启用路由模型绑定,不需要再调用静态destroy方法传ID,直接调用绑定到的模型实例的delete方法即可,代码更简洁:
public function destroy(Datasekolah $datasekolah) { $datasekolah->delete(); return redirect('/datasekolah/datasiswa')->with('success', 'Data deleted!'); }
内容的提问来源于stack exchange,提问作者NyK
相关产品推荐
相关产品推荐

