我现在尝试几天来限制用户可以发布的评论数量。 因此,在用户提交评论后,他应该等待例如5分钟,以便能够发布下一条评论。
我知道这可以通过laravel验证器和'之后的'来实现。规则。但是我现在尝试了几件事,但还没有成功。 这是方法的代码:
public function storeComment($id, Request $request)
{
$user = User::with('newsComment')->find(Auth::user()->id);
if ($user->NewsComment->count() != 0)
{
$last_comment = NewsComment::where('author_id', Auth::user()->id)->orderBy('created_at', 'desc')->first();
$date_after = new \DateTime($last_comment->created_at);
$date_after->modify('+5 minutes');
} else {
$date_after = date("Y-m-d H:i:s", mktime(0, 0, 0, 00, 00, 0000));
}
$request->current_date = date("Y-m-d H:i:s");
$this->validate($request, [
'comment' => 'required|max:255|min:5',
'current_date' => 'after:'.$date_after->format("Y-m-d H:i:s"),
]);
$comment = new NewsComment;
$comment->news_article_id = $id;
$comment->author_id = Auth::user()->id;
$comment->comment = $request->comment;
$comment->save();
return $this->showArticle($id);
}
因此,我知道,此代码从数据库中读取正确的时间,并将5分钟添加到给定日期。在模板中,我添加了一个名为' current_date'的空的隐藏表单字段。在上面的方法中,我使用当前日期填充此变量,并尝试使用'之后的'来验证它。验证规则。
但出于某种原因,它不会起作用。
我希望你们中的一些人可以帮助我。
我对laravel不熟悉所以请耐心等待。
答案 0 :(得分:0)
您可以检查评论是否已保存并在会话中闪现当前时间戳,而不是$comment->save();
,然后与"现在"进行比较。验证后。
if($comment->save()){
$request->session()->put('post_time', Carbon::now());
}
并在验证后:
if ($request->session()->has('post_time')) {
if(Carbon::now()->diffInMinutes($request->session()->get('post_time')) < 5){
//stop execution
}
}