РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
840 of 1361 menu

Метод 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,
    который возвращает время до следующей попытки
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить