Laravel 8出现Missing required parameter for ROUTE路由参数缺失问题求助
报错原因
- Laravel资源路由默认会将复数资源名转换为单数作为路由参数名,你定义的
Route::resource('admin/panitia', PanitiaController::class)会自动生成参数名为panitium的路由段{panitium},和你控制器中隐式绑定的参数名不匹配。 - 控制器
edit方法的参数为$panitias,和路由参数名panitium不一致,导致隐式模型绑定无法正确注入对应数据记录,传值到路由时匹配不到要求的panitium参数。
解决方法
你可以任选以下一种方案修改:
方案1:对齐控制器、模板的参数名和路由默认参数名
- 修改控制器
edit方法的参数名:
public function edit(Panitia $panitium) { return view('admin.panitia.edit', compact('panitium')); }
- 修改edit.blade.php中的表单调用代码:
<form action="{{ route('panitia.update', $panitium->id) }}" method="POST" enctype="multipart/form-data">
方案2:自定义资源路由参数名,适配现有代码
修改路由定义,指定资源参数名为你当前使用的panitias,无需修改控制器和模板的现有代码:
Route::resource('admin/panitia', PanitiaController::class)->parameters([ 'panitia' => 'panitias' ]);
方案3:路由调用时明确指定参数键名
直接修改模板中的路由调用代码,手动指定路由要求的panitium参数键:
<form action="{{ route('panitia.update', ['panitium' => $panitias->id]) }}" method="POST" enctype="multipart/form-data">
内容的提问来源于stack exchange,提问作者faisal ardhi
相关产品推荐
相关产品推荐

