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

Laravel更新查询失效触发404错误,请求技术协助

Laravel编辑用户提交后404错误排查求助

我是Laravel新手,在编辑用户信息并点击提交按钮后,页面出现404错误,表单内容未发生任何变更。我推测可能存在细微疏漏,以下是我的表单代码与更新路由代码,恳请帮忙排查问题:

表单代码

<form action="users/edit/{{$user->id}}" method="post">
    @csrf
    <div class="mb-3 mt-3">
        <label for="name" class="form-label">اسم</label>
        <input type="text" class="form-control" id="name"  name="name" value="{{$user->name}}">
    </div>
    <div class="mb-3">
        <label for="lastname" class="form-label">فامیلی:</label>
        <input type="text" class="form-control" id="last_name"  name="last_name"  value="{{$user->last_name}}">
    </div>
        <button type="submit" class="btn btn-primary" >ثبت</button>
    </div>
</form>

更新路由代码

Route::post('/users/edit/{id}', function (Request $request, $id) {
    DB::table('users')
        ->where('id', $id)
        ->update([
            'id' => $request->id,
            'name' => $request->name,
            'last_name' => $request->last_name,
        ]);

    return 'done';
});

排查修复方案:

  1. 修正表单action路径
    表单里的相对路径users/edit/{{$user->id}}容易因当前页面URL层级问题导致路由不匹配,改用Laravel路由辅助函数或绝对路径:

    • 先给路由命名:
      Route::post('/users/edit/{id}', function (Request $request, $id) {
          // 逻辑不变
      })->name('users.update');
      
    • 表单里用route()生成正确路径:
      <form action="{{ route('users.update', $user->id) }}" method="post">
      

    或者直接用绝对路径:

    <form action="/users/edit/{{$user->id}}" method="post">
    
  2. 遵循Laravel资源更新的HTTP方法规范
    更新操作建议用PUT或PATCH方法,需在表单里添加@method('PUT'):

    <form action="{{ route('users.update', $user->id) }}" method="post">
        @csrf
        @method('PUT')
        <!-- 其他表单内容 -->
    </form>
    

    对应路由也要改成PUT:

    Route::put('/users/edit/{id}', function (Request $request, $id) {
        // 逻辑不变
    })->name('users.update');
    
  3. 移除更新逻辑中不必要的ID字段
    表单未提交id参数,且用户ID不应被修改,删掉update数组里的'id' => $request->id:

    DB::table('users')
        ->where('id', $id)
        ->update([
            'name' => $request->name,
            'last_name' => $request->last_name,
        ]);
    
  4. 清除路由缓存
    如果之前执行过php artisan route:cache,新路由可能未生效,运行:

    php artisan route:clear
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 03:14:54