Laravel存储评论提示Too few arguments to function错误如何解决
问题原因
- 你使用了Laravel嵌套资源路由
articles.comments,该路由的store方法要求必须传递父资源「文章ID」作为参数,你在表单生成路由时没有传入该参数,导致控制器store方法接收不到第二个参数触发参数不足报错。
修复步骤
1. 修改模板表单路由传参
show.blade.php里的表单action需要传入当前文章实例/ID,修改对应代码:
<!-- 改前 --> <form class="container-fluid" action="{{ route('articles.comments.store')}}" method="post"> <!-- 改后 --> <form class="container-fluid" action="{{ route('articles.comments.store', $article)}}" method="post">
注:$article是文章详情页默认传入的文章模型实例,Laravel会自动提取ID作为路由参数。
2. (可选优化)控制器参数对齐路由约定
嵌套资源路由默认的父级参数名为article,可以将控制器store方法的参数名对齐,避免后续路由绑定异常:
// 改前 public function store(Request $request, $id) { // 改后 public function store(Request $request, $article) { // 后续用到$id的地方同步改成$article即可 $data->article_id = $article;
3. (可选修复错误提示)修正提交成功提示
当前控制器里的成功提示写的是「文章發表成功」,和评论功能不符,放开注释的正确跳转即可:
// 注释错误的提示 // return redirect()->route('root')->with('notice', '文章發表成功!'); // 启用正确跳转 return redirect('articles/'. $article)->with('notice', '回覆發表成功!');
额外冗余代码提示
你在web.php中重复定义了两次userhome路由,删除掉带auth:sanctum中间件的那一条即可,避免路由覆盖异常。
内容的提问来源于stack exchange,提问作者Jay Feng
相关产品推荐
相关产品推荐

