Laravel 8 中 Resource Controllers 资源控制器无法正常工作如何排查?
问题原因
- 请求方法不匹配:Laravel资源控制器的
destroy动作默认绑定DELETE请求,普通<a>标签发起的是GET请求,会被路由匹配到show方法而非destroy方法,删除逻辑无法触发。你可以执行php artisan route:list命令查看所有路由的请求方式与对应动作,确认destroy路由的请求规则。 - 数据库删除逻辑错误:
DB::table('users')->delete($id)不是QueryBuilder的正确用法,delete()方法不需要传递主键参数,需要先通过where条件定位到目标记录再执行删除操作。
解决办法
1. 调整前端请求方式
Laravel支持表单方法伪造,使用POST表单配合@method('DELETE')指令发起符合要求的DELETE请求,替换原有a标签即可:
<form action="{{ route('users.destroy', $user->id) }}" method="POST"> @csrf @method('DELETE') <button type="submit">Delete</button> </form>
如果需要保留链接样式,可给submit按钮添加CSS样式伪装为普通链接。
2. 修正控制器删除逻辑
以下两种写法二选一即可:
QueryBuilder写法
public function destroy($id) { $delete = DB::table('users')->where('id', $id)->delete(); if ($delete) { echo 'success'; // 实际项目建议跳转回列表页并携带闪存提示:return redirect()->route('users.index')->with('success', '删除成功'); } }
Eloquent模型写法(更推荐)
// 顶部引入User模型 use App\Models\User; public function destroy($id) { $delete = User::destroy($id); if ($delete) { echo 'success'; } }
内容的提问来源于stack exchange,提问作者Red Panda
相关产品推荐
相关产品推荐

