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

Laravel 8调用update方法报错BadMethodCallException提示show方法不存在

问题根源

  1. 你注册了Route::resource('users', UsersGestionController::class)资源路由,Laravel的资源路由会默认注册包含show、update在内的7个标准RESTful方法路由,你没有定义show方法所以触发对应异常。
  2. 你前端用<a>标签调用route('users.update',$users->id),<a>标签发起的是GET请求,而资源路由的update方法默认匹配PUT/PATCH请求,GET /users/{用户ID}的请求会直接匹配到资源路由的show方法规则,所以不会走到你预期的update逻辑,反而触发了show方法不存在的报错。
  3. 代码存在多处语法、命名不匹配问题:
    • 控制器中User:where少写一个冒号,正确写法为User::where
    • 控制器名拼写不一致:你的控制器文件名为UserGestionController.php,但路由中写的是UsersGestionController(多了一个s)
    • 路由重复定义:你先后定义了两个/userslist路由,前者闭包路由会被后者覆盖
    • 跳转路由名不匹配:update方法中redirect()->route('userlist'),但你定义的路由名是userslist(多了一个s)

修复步骤

  1. 调整资源路由规则:如果你不需要完整的7个资源方法,要么限制资源路由只注册你需要的方法,要么直接删除资源路由(你已经单独定义了update自定义路由):
    // 方式1:限制资源路由仅注册需要的方法
    Route::resource('users', UsersGestionController::class)->only(['update']);
    // 方式2:不需要就直接删除这行资源路由代码
    
  2. 修改前端更新提交逻辑:不能用a标签发起更新请求,改为表单提交,匹配路由请求规则:
    如果你用资源路由的update方法:
    <form action="{{ route('users.update', $users->id) }}" method="POST">
        @csrf
        @method('PUT')
        <!-- 你的用户信息表单字段 -->
        <button type="submit" class="btn btn-warning">更新</button>
    </form>
    
    如果你用自己定义的POST类型update路由:
    <form action="{{ route('update') }}" method="POST">
        @csrf
        <input type="hidden" name="id" value="{{ $users->id }}">
        <!-- 其他用户信息表单字段 -->
        <button type="submit" class="btn btn-warning">更新</button>
    </form>
    
  3. 修复所有语法和命名不匹配问题:
    • 修正控制器中的User:where为User::where
    • 统一控制器名拼写,要么都加s要么都不加
    • 删除顶部无效的闭包/userslist路由
    • 修正update方法中的跳转路由为route('userslist')

内容的提问来源于stack exchange,提问作者SouhailMT

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:15:05