You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:40:05