Laravel路由提示缺少必填参数,求问题原因及解决方法
问题原因及解决办法
这个报错的核心原因是你在视图里调用route()辅助函数时,没有正确传递路由所需的参数值。
咱们一步步拆解来看:
- 你的路由定义里明确声明了需要
{id}参数:Route::get('delete/{id}',[ 'uses' => 'PostController@getDestroy', 'as' => 'admin.index' ]); - 但在视图循环里,你写的是
route('admin.index', ['id'])——这里的['id']只是一个包含字符串'id'的数组,Laravel根本不知道你要传递的实际ID值是什么,它需要的是键值对格式:键对应路由里的参数名,值对应具体的ID数据。
正确的写法应该是这样:
把视图里的链接代码改成:
@foreach($posts as $post) <p> <a href="{{ route('admin.index', ['id' => $post->id]) }}">Delete</a> </p> @endforeach
这样route()函数就能正确把当前循环项的$post->id值填充到路由的{id}参数位置,自然就不会再报参数缺失的错误了。
额外小建议(可选优化):
你的路由命名admin.index有点不够语义化,建议改成更清晰的名称,比如admin.posts.delete,这样后续维护时一眼就能知道这个路由的作用,修改起来也更直观:
Route::get('delete/{id}',[ 'uses' => 'PostController@getDestroy', 'as' => 'admin.posts.delete' ]);
对应的视图里也要同步更新路由名称:
<a href="{{ route('admin.posts.delete', ['id' => $post->id]) }}">Delete</a>
内容的提问来源于stack exchange,提问作者premira
相关产品推荐
相关产品推荐

