Laravel 9 超级管理员无法删除评论(Spatie Laravel-permission)
解决Laravel CRUD删除评论无反应的问题
核心问题:HTTP请求方法不匹配
Laravel的resource路由中,destroy方法仅接收DELETE请求,但你使用的<a>标签默认发送GET请求,这导致路由无法匹配,删除操作自然没有任何反应(无报错是因为GET请求被路由直接忽略)。
解决方案
1. 改用表单发送DELETE请求(官方推荐)
将Blade中的删除链接替换为表单,利用Laravel的方法伪造机制发送DELETE请求:
@foreach ($comments as $comment) <tr> <td>"{{ $comment->com }}"</td> @hasrole('user') USER @endhasrole @hasrole('Super-Admin') <form action="{{ route('comments.destroy', $comment->id) }}" method="POST" style="display: inline-block;"> @csrf @method('DELETE') <button type="submit" class="btn btn-primary">Delete</button> </form> @endhasrole </tr> @endforeach
@csrf:必须添加,用于Laravel的CSRF攻击防护验证@method('DELETE'):伪造DELETE请求方法,因为HTML表单原生不支持PUT/DELETE类型的请求
2. 统一路由模型绑定变量名(优化)
你的控制器destroy方法参数是大写开头的$Comment,而路由默认参数是小写的comment,虽然Laravel不区分大小写,但统一命名更符合编码规范,避免潜在问题:
public function destroy(Comment $comment) { $comment->delete(); return redirect()->route('comments.index') ->with('success','Comment deleted successfully'); }
3. 验证角色权限(排查)
如果问题仍存在,可以临时在Blade中输出当前用户的角色列表,确认是否真的拥有Super-Admin角色:
{{ auth()->user()->roles->pluck('name') }}
输出结果应包含Super-Admin,否则说明角色配置存在问题。
内容的提问来源于stack exchange,提问作者Rune
相关产品推荐
相关产品推荐

