原文地址:https://www.wjcms.net/archive…
Laravel的申请速率限制器性能已加强,具备更大的灵活性和性能,同时仍放弃与先前版本的throttle中间件API的向后兼容性。
速率限制器是应用RateLimiter立面的for办法定义的。该for办法承受一个速率限制器名称和一个Closure,该Closure返回应利用于调配了该速率限制器的路由的限度配置:
use Illuminate\Cache\RateLimiting\Limit; use Illuminate\Support\Facades\RateLimiter; RateLimiter::for('global', function (Request $request) { return Limit::perMinute(1000); });
因为速率限制器回调接管传入的HTTP申请实例,因而您能够依据传入的申请或通过身份验证的用户动静构建适当的速率限度:
RateLimiter::for('uploads', function (Request $request) { return $request->user()->vipCustomer() ? Limit::none() : Limit::perMinute(100); });
有时您可能心愿将速率限度按任意值进行细分。例如,您可能心愿容许用户每个IP地址每分钟100次访问给定路由。为此,您能够by在建设速率限度时应用以下办法:
RateLimiter::for('uploads', function (Request $request) { return $request->user()->vipCustomer() ? Limit::none() : Limit::perMinute(100)->by($request->ip()); });
能够应用throttle 中间件将速率限制器附加到路由或路由组。油门中间件承受您心愿调配给路线的速率限制器的名称:
Route::middleware(['throttle:uploads'])->group(function () { Route::post('/audio', function () { // }); Route::post('/video', function () { // }); });