Laravel获取帖子ID及解决编辑删除404错误问题求助
Laravel更新/删除操作404错误解决及ID获取方法
我是Laravel新手,尝试编辑和删除关联到更新页面的车辆数据,但每次执行更新或删除都会出现404页面未找到错误,推测问题出在URL上。
问题根源
你当前使用相对路径(../cars/{{ $car->id }}、cars/{{ $car->id }}/edit)生成URL,这种方式会根据当前页面URL动态变化,很容易出现路径错误。Laravel的资源路由已经定义了标准的命名路由,应该用命名路由生成绝对路径。
解决步骤
1. 修正编辑页面(edit.blade.php)的表单提交路径
把表单的action改为使用route()辅助函数,对应资源路由的cars.update命名路由:
<form action="{{ route('cars.update', $car->id) }}" method="POST"> @csrf @method('PUT') <!-- 表单输入项保持不变 --> <button type="submit" class="bg-teal-500 block shadow-5xl mb-10 p-2 w-80 uppercase font-bold text-white"> Update </button> </form>
2. 修正列表页的编辑链接和删除表单路径
- 编辑链接使用
cars.edit命名路由:
<a class="pb-2 italic text-teal-500" href="{{ route('cars.edit', $car->id) }}"> Edit → </a>
- 删除表单使用
cars.destroy命名路由:
<form action="{{ route('cars.destroy', $car->id) }}" method="POST"> @csrf @method("delete") <button type="submit" class="pb-2 italic text-red-500"> Delete → </button> </form>
3. 优化控制器方法(可选,更规范)
Laravel支持路由模型绑定,可以直接注入Car模型实例,无需手动查询ID:
更新方法优化:
public function update(Request $request, Car $car) { $car->update([ 'name' => $request->input('name'), 'founded' => $request->input('founded'), 'description' => $request->input('description') ]); return redirect('/cars'); }
删除方法优化:
public function destroy(Car $car) { $car->delete(); return redirect('/cars'); }
这种方式下Laravel会自动根据URL中的ID查找对应的Car实例,不存在时自动返回404,比手动find或where更安全规范。
Laravel中获取数据ID的常见方式
- 从路由参数获取:在控制器方法中直接声明参数(如
$id),或通过路由模型绑定获取模型实例后,调用$car->id获取ID。 - 从模型实例获取:当已持有模型对象(比如
$car = Car::find(1)),直接调用$car->id即可获取对应ID。 - 从请求中获取:如果ID通过表单提交,可使用
$request->input('id')获取(资源路由场景下一般无需此方式,因为ID已包含在URL中)。
内容的提问来源于stack exchange,提问作者jester
相关产品推荐
相关产品推荐

