Метод ensureAccepted
Метод ensureAccepted класса RateLimit
проверяет, был ли запрос принят в рамках
установленного лимита. Если лимит превышен
(свойство isAccepted равно false),
метод выбрасывает исключение
RateLimitExceededException. Параметров
метод не принимает. Возвращаемого значения нет:
при успешной проверке выполнение продолжается
дальше.
Синтаксис
public function ensureAccepted(): void
Пример
Давайте создадим лимитер и попробуем потребить
токен. Если лимит не превышен, метод
ensureAccepted ничего не сделает, и мы
получим обычный ответ:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\RateLimiter\RateLimiterFactory;
class ArticleController extends AbstractController
{
public function index(RateLimiterFactory $articleLimiter): Response
{
$limiter = $articleLimiter->create('user');
$limit = $limiter->consume(1);
$limit->ensureAccepted();
return new Response('hello');
}
}
?>
Результат выполнения кода при наличии свободных токенов:
"hello"
Пример
Давайте исчерпаем лимит и вызовем
ensureAccepted. Теперь метод выбросит
исключение RateLimitExceededException:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\RateLimiter\Exception\RateLimitExceededException;
use Symfony\Component\RateLimiter\RateLimiterFactory;
class ArticleController extends AbstractController
{
public function index(RateLimiterFactory $articleLimiter): Response
{
$limiter = $articleLimiter->create('user');
for ($i = 0; $i < 10; $i++) {
$limiter->consume(1);
}
$limit = $limiter->consume(1);
try {
$limit->ensureAccepted();
} catch (RateLimitExceededException $e) {
return new Response('too many requests');
}
return new Response('hello');
}
}
?>
Результат выполнения кода при исчерпанном лимите:
"too many requests"
Смотрите также
-
класс
RateLimit,
который хранит результат потребления токенов -
метод
isAccepted,
который проверяет, принят ли запрос -
метод
getRemainingTokens,
который возвращает число оставшихся токенов -
метод
getRetryAfter,
который возвращает время до следующей попытки