throttlers = $throttlers; } public function process(Request $request, Handler $handler): Response { if ($this->throttle($request)) { throw new FloodingException; } return $handler->handle($request); } /** * @return bool */ public function throttle(Request $request): bool { $throttle = false; foreach ($this->throttlers as $throttler) { $result = $throttler($request); // Explicitly returning false overrides all throttling. // Explicitly returning true marks the request to be throttled. // Anything else is ignored. if ($result === false) { return false; } elseif ($result === true) { $throttle = true; } } return $throttle; } }