2017-04-20 1 views
1

私はlaravel 5.4を使用して、私が受け取ったときにそれがうまく動作しますが、Laravel 5セッションフラッシュのようなスロットルメッセージを表示するには?

Route::group(['middleware' => ['throttle:2']], function() { 

    Route::post('/xxx', '[email protected]'); 

}); 

以下のようなルートの要求を制限する「あまりにも多くの試みを。」空白のページに表示されます。このようなセッションフラッシュメッセージをブレードビューで表示する方法はありますか?

答えて

1

これを行う簡単な方法は、スロットルミドルウェアを変更することです。

まず、このような基本スロットルミドルウェア拡張する新しいミドルウェア作成:アプリでスロットルミドルウェアを変更

namespace App\Http\Middleware; 

use Illuminate\Routing\Middleware\ThrottleRequests as 
BaseThrottleRequests; 

class ThrottleRequests extends BaseThrottleRequests 
{ 
} 

そしてを/ HTTP/Kernel.php:

'throttle' => \App\Http\Middleware\ThrottleRequests::class 

それがしますあなた自身のスロットルミドルウェアを使用しています。そして、それはlaravelからのものから広がっています。それはその機能性を持ち、前と同じように動作します。

次に、Too Many Attempsのケースでは、buildResponseが応答を作成することがわかります。そのため、あなたは自分のミドルウェア内部でそれを上書きする必要があります。

protected function buildResponse($key, $maxAttempts) 
{ 
    $retryAfter = $this->limiter->availableIn($key); // This gives you the number of seconds before the next time it is available 

    return redirect('test')->with('error', '...'); // You can use redirect() and all those stuffs as you would normally do to redirect the user and set a session message 
} 
+0

が、それは魔法のように動作します:) – user2983865

+0

どういたしまして、秀多くのアレックスをありがとう:) –

+0

アレックス私は1つの以上の質問があります。あなたのソリューションは素晴らしいですが、私はこのようにハードコードされたエラーメッセージを表示します: 'return redirect( 'test') - >( 'error'、 'Try 10 minutes later');' Retry-After time dynamicを表示できますか?私は5分後に 'Try 5 minutes later'などと表示された場合を意味します。 – user2983865

関連する問題