php - 函数 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() !!}
解决方案
如果您想将帖子传递$id
给Controller
,则不必使用Route::resource
.
您必须创建自己的路线。
Route::post('comment/{id}', CommentController@store)->name('comments.store');
或者,如果您想遵循其余的练习,例如:
Route::post('posts/{id}/comments', CommentController@store)->name('comments.store');