首页 > 解决方案 > 函数 App\Http\Controllers\CommentController::store() 的参数太少,通过了 1 个,预期正好有 2 个

问题描述

我有一个错误说:

函数 App\Http\Controllers\CommentController::store() 的参数太少,通过了 1 个,预期正好有 2 个。CommentController 是评论表的控制器。

store()函数执行以填充评论表中的行,重要参数之一是发表评论的帖子 ID。posts 是一个单独的表,帖子的 id 用于链接评论表中的所有评论。

评论控制器中的 store()

 /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request, $id)
    {
        $post = Post::find($id);
        $this->validate($request, [
            'comment' => 'required',
            'v_email' => 'required'
          ]);
          $comment = new Comment;
          $comment->comment_body = $request->input('comment');
          $comment->viewer_email = $request->input('v_email');
          $comment->post_id = $post->id;
          $comment->save();
          return redirect('/posts')->with('success', 'commented');
    }

web.php 中的路由 (我使用 route::resource 将每个以注释开头的 url 重定向到 CommentController)

Route::resource('comment', CommentController::class);

刀片形式

{!! Form::open(['action' =>['App\Http\Controllers\CommentController@store', $posts->id] , 'method'=>'POST']) !!}

        
        <div class="form-group">
          {{Form::label('comment', 'Comment')}}
          {{Form::textarea('comment','',['class'=>'form-control', 'placeholder'=>'Tell us what you think...'])}}
        </div>
        <div class="form-group">
          {{Form::label('v_email', 'Email')}}
          {{Form::text('v_email','',['class'=>'form-control', 'placeholder'=>'Please enter your email. It will be just between us'])}}
        </div>
        {{Form::submit('Send',['class'=>'btn btn-primary'])}}
        {!! Form::close() !!}

标签: phplaravellaravel-8

解决方案


如果您想将帖子传递$idController,则不必使用Route::resource.
您必须创建自己的路线。

Route::post('comment/{id}', CommentController@store)->name('comments.store');

或者,如果您想遵循其余的练习,例如:

Route::post('posts/{id}/comments', CommentController@store)->name('comments.store');

推荐阅读