Php 函数App\Http\Controllers\CommentController::store()的参数太少,传递了1个,预期正好是2个
我有一个错误,上面写着: 函数App\Http\Controllers\CommentController::store()的参数太少,传递了1个,预期正好是2个。CommentController是comments表的控制器 执行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
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');