2016-03-21 7 views
2

私は、ユーザーが投稿できるコメントの量を制限するために数日間努力しています。 ユーザーはコメントを送信した後、次のコメントを投稿できるように、たとえば5分待つ必要があります。コメントを投稿するための制限

これはlaravelバリデーターで 'after'ルールを使用して実行できます。しかし、私は今いくつかのことを試してみましたが、まだ何もできませんでした。 は、ここでの方法のコードです:

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'検証ルールで検証します。

しかし、何らかの理由で動作しません。

あなたのうちの何人かが私にこれを手伝ってくれることを願っています。

私はlaravelにbtwですので、私にご負担ください。

+0

あなたがlaravelせず、定期的にPHPを使用する方法を知っていますか? – frosty

+0

約2年前ですが、私はそうします。 – Phillor

+0

コメント表には、日付と時刻の列がありますか?彼らがコメントしようとしているとき、彼らがコメントした最後の時間を確認してください。それが5分未満の場合は、再びコメントすることはできません。 – frosty

答えて

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 
    } 

} 
+0

ありがとうございます。私は明日それを試してみるよ。 – Phillor

関連する問題