Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 函数App\Http\Controllers\CommentController::store()的参数太少,传递了1个,预期正好是2个_Php_Laravel_Laravel 8 - Fatal编程技术网

Php 函数App\Http\Controllers\CommentController::store()的参数太少,传递了1个,预期正好是2个

Php 函数App\Http\Controllers\CommentController::store()的参数太少,传递了1个,预期正好是2个,php,laravel,laravel-8,Php,Laravel,Laravel 8,我有一个错误,上面写着: 函数App\Http\Controllers\CommentController::store()的参数太少,传递了1个,预期正好是2个。CommentController是comments表的控制器 执行store()函数以填充注释表中的行,其中一个重要参数是对其进行注释的post id。 posts是一个单独的表,post的id用于链接comments表中的所有注释 在CommentController中存储() /** * Store a newly

我有一个错误,上面写着:

函数App\Http\Controllers\CommentController::store()的参数太少,传递了1个,预期正好是2个。CommentController是comments表的控制器

执行
store()
函数以填充注释表中的行,其中一个重要参数是对其进行注释的post id。 posts是一个单独的表,post的id用于链接comments表中的所有注释

在CommentController中存储()

 /**
     * 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(我使用route::resource将每个以comment开头的url重定向到CommentController)

叶片形式

{!! 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() !!}
{!!Form::open(['action'=>['App\Http\Controllers\CommentController@store“,$posts->id],'method'=>'POST'])
{{Form::label('comment','comment')}
{{Form::textarea('comment','',['class'=>'Form-control','placeholder'=>'告诉我们您的想法…')}
{{Form::label('v_email','email')}
{{Form::text('v_email','',['class'=>'Form-control','placeholder'=>'请输入您的电子邮件。它将在我们之间']])}
{{Form::submit('Send',['class'=>'btn btn primary'])}
{!!Form::close()!!}

如果您想将post
$id
传递给
控制器
,您不必使用
路由::资源

您必须创建自己的路线

Route::post('comment/{id}', CommentController@store)->name('comments.store');
或者,如果你想遵循休息练习,比如:

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

这是预期的行为。IoC容器将只将传入请求传递给
存储
方法。因此,由于只将一个参数传递给方法签名,因此将引发错误

在我看来,您必须将id属性放在请求主体中,并使用以下方法在控制器中捕获它:
request->get(“id”)

这个错误消息到底是什么让我感到困惑呢?我正在传递请求和id,但它仍然说传递了一个参数。很明显,你没有,PHP并不是在无聊的时候才制造这些错误的。你能解释一下吗?为什么$posts->id对store()函数不可见?谢谢@RiggsFollythe存储函数不应获取$id参数,仅获取requests参数,但为什么?route::resource不是到特定控制器的通用路由吗?我在这个类似问题的大量答案中看到了您上面的路由方法,我很好奇为什么我不能使用resource来完成它?是的,我阅读了文档,它说对于POST方法,路由将被定向到store()函数。那么冲突在哪里呢?我的表单也通过POST方法提交。您将在主-明细关系中插入一条记录,而不是在普通模型中。通过这种方式,您需要将一个值传递给store函数,因此您不能使用Route::resource如果我们想遵循Rest实践,那么路由不应该是类似于,
posts/{id}/comments
Route::post('posts/{id}/comments', CommentController@store)->name('comments.store');