Метод reset
Метод reset класса RateLimiter
сбрасывает состояние лимитера для конкретного
ключа. Он обнуляет количество потреблённых
токенов и восстанавливает полный доступный
лимит, заданный при создании лимитера.
Первым параметром передаётся строковый ключ,
для которого нужно выполнить сброс.
Синтаксис
$limiter->reset(string $key): void
Пример
Давайте создадим лимитер, израсходуем часть токенов, а затем сбросим лимит для ключа:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\RateLimiter\RateLimiterFactory;
class RateController extends AbstractController
{
public function index(RateLimiterFactory $apiLimiter): Response
{
$limiter = $apiLimiter->create('user');
$limit = $limiter->consume(3);
echo $limit->getRemainingTokens();
$limiter->reset('user');
echo $limit->getRemainingTokens();
return new Response();
}
}
?>
Результат выполнения кода:
75
Пример
Давайте проверим, что после сброса лимит снова доступен для потребления:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\RateLimiter\RateLimiterFactory;
class RateController extends AbstractController
{
public function index(RateLimiterFactory $apiLimiter): Response
{
$limiter = $apiLimiter->create('abcde');
for ($i = 0; $i < 10; $i++) {
$limiter->consume(1);
}
$limiter->reset('abcde');
$limit = $limiter->consume(1);
echo $limit->isAccepted() ? 'accepted' : 'rejected';
return new Response();
}
}
?>
Результат выполнения кода:
"accepted"
Смотрите также
-
класс
RateLimiter,
который управляет ограничением скорости -
метод
create,
который создаёт новый лимитер -
метод
consume,
который расходует токены лимитера -
класс
RateLimit,
который хранит результат проверки лимита