Laravel报错:Route: Region.update缺少必填参数
Laravel:
Missing required parameter for [Route: Region.update] 错误修复 已完成Laravel Bootcamp教程,自行实现区域编辑功能时触发上述错误。列表页的编辑链接可正常跳转至http://localhost/Region/5/edit,但编辑页提交表单时报错。尝试过显式传递['Region' => $region]参数,问题依旧。
相关代码
RegionController.php
public function edit(Region $region) { return view('regions.edit', [ 'region' => $region, ]); } public function index() { $regions = Region::all(); return view('regions.index', [ 'regions' => $regions, ]); } public function update(Request $request, Region $region) { $validated = $request->validate([ 'name' => 'required|string|max:255', ]); $region->update($validated); return redirect(route('Region.index')); }
regions/index.blade.php
<x-dropdown-link :href="route('Region.edit', $region)"> <img src={{url("build/img/edit.png")}} width="40"> </x-dropdown-link>
regions/edit.blade.php
<form method="POST" action="{{ route('Region.update', $region) }}">
web.php
Route::resource('Region',RegionController::class) ->only(['index', 'create', 'store', 'edit', 'update']) ->middleware(['auth', 'verified']);
问题原因
- 路由名称与参数大小写不匹配:Laravel资源路由默认使用小写单数的参数名称(如
region),但你定义路由时用了大写的Region,导致路由生成时无法正确匹配参数。 - 缺少PUT请求方法声明:
update对应的资源路由是PUT/PATCH请求,仅设置method="POST"无法触发正确的路由,也可能间接导致参数解析异常。
解决方案
方案1:遵循Laravel资源路由命名规范(推荐)
Laravel资源路由建议使用小写复数形式的资源名称,修正路由定义:
Route::resource('regions', RegionController::class) ->only(['index', 'create', 'store', 'edit', 'update']) ->middleware(['auth', 'verified']);
同步更新所有路由调用为小写规范:
- 列表页编辑链接:
route('regions.edit', $region) - 编辑页表单action:
route('regions.update', $region) - 控制器跳转:
redirect(route('regions.index'))
方案2:兼容现有路由名称(不推荐)
若不想修改路由名称,需显式传递小写的region参数(注意是小写):
<form method="POST" action="{{ route('Region.update', ['region' => $region]) }}">
必加步骤:声明PUT请求方法
无论采用哪种方案,编辑表单必须添加@csrf和@method('PUT'),否则Laravel无法识别update路由:
<form method="POST" action="{{ route('regions.update', $region) }}"> @csrf @method('PUT') <!-- 你的表单字段 --> </form>
内容的提问来源于stack exchange,提问作者Ulrick Evrard
相关产品推荐
相关产品推荐

