Php 张贴评论的限制

Php 张贴评论的限制,php,laravel,Php,Laravel,我现在花了几天时间限制用户可以发表的评论数量。 因此,在用户提交评论后,他应该等待5分钟,以便能够发布下一条评论 我知道这可以通过使用“after”规则的laravel验证器来完成。但我现在已经尝试了几件事,但都没有成功。 以下是该方法的代码: public function storeComment($id, Request $request) { $user = User::with('newsComment')->find(Auth::user()->id); if

我现在花了几天时间限制用户可以发表的评论数量。 因此,在用户提交评论后,他应该等待5分钟,以便能够发布下一条评论

我知道这可以通过使用“after”规则的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”的空隐藏表单字段。在上面的方法中,我用当前日期填充这个变量,并尝试用“after”验证规则验证它

但由于某种原因,它不会起作用

我希望你们中的一些人能在这方面帮助我


顺便说一句,我是拉威尔的新手,所以请容忍我。

而不是
$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
   }  

}
if($request->session()->has('post_time')){
if(Carbon::now()->diffInMinutes($request->session()->get('post_time'))<5){
//停止执行
}  
}

你知道如何在没有laravel的情况下使用普通php吗?大约2年前,但我知道,是的。在注释表中,你有日期和时间栏,对吗?当他们试图发表评论时,检查他们上次发表评论的时间。如果是不到5分钟前,不要让他们再评论。不。我只有一个专栏。“created_at”列。正如您在代码中所看到的,我获取最后一条注释的日期,添加5分钟,并将其添加到“after”验证规则中。所以通常情况下,这应该是可行的。也许我用错了laravel的验证器。但是我在谷歌上找不到很多关于“后”验证规则的信息。试着在没有laravel的情况下进行。