发表评论的限制

时间:2016-03-21 19:31:05

标签: php laravel

我现在尝试几天来限制用户可以发布的评论数量。 因此,在用户提交评论后,他应该等待例如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不熟悉所以请耐心等待。

1 个答案:

答案 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
   }  

}