Laravel路由报错Missing required parameter:foo 如何修复?
Laravel路由参数缺失问题修复
问题场景
我在Laravel应用中配置了如下路由,该路由使用带有__invoke方法的FooController:
Route::get('/foos/{foo:baz_param}', FooController::class)->name('foos');
同时我的Blade模板中有如下链接:
<a href="{{ route('foos', ['baz_param' => $foo->baz_param]) }}"> {{ $foo->baz_param }} </a>
但页面出现如下报错:
Missing required parameter for [Route: foos] [URI: foos/{foo}] [Missing parameter: foo].
修复方法
问题核心是路由参数的传递键名错误:
- 路由定义里的
{foo:baz_param}中,foo是路由参数的名称,baz_param是匹配模型的字段名 - 调用
route()函数时,必须使用参数名称foo作为数组键,而非字段名baz_param
方案1:传递字段值
修改Blade模板中的链接代码:
<a href="{{ route('foos', ['foo' => $foo->baz_param]) }}"> {{ $foo->baz_param }} </a>
方案2:直接传入模型实例
Laravel会自动使用指定的baz_param字段生成URL,代码更简洁:
<a href="{{ route('foos', ['foo' => $foo]) }}"> {{ $foo->baz_param }} </a>
以上两种方式都能正确生成路由链接,解决参数缺失的报错。
内容的提问来源于stack exchange,提问作者ltdev
相关产品推荐
相关产品推荐

