> */ private array $rateLimits = []; public function __construct( private readonly RateLimiterFactoryInterface $rateLimiterFactory, ) {} public function add(string $controllerClass, string $actionMethod, int $limit, string $interval, string $policy, string $message): void { $this->rateLimits[$controllerClass][$actionMethod] = new RateLimit($limit, $interval, $policy, $message); } public function getRateLimit(string $controllerClass, string $actionMethod): ?RateLimit { return $this->rateLimits[$controllerClass][$actionMethod] ?? null; } public function createLimiter(string $controllerClass, string $actionMethod, ServerRequestInterface $request): ?LimiterInterface { $rateLimit = $this->getRateLimit($controllerClass, $actionMethod); if ($rateLimit === null) { return null; } $identifier = strtolower(str_replace('\\', '-', $controllerClass) . '-' . $actionMethod); return $this->rateLimiterFactory->createRequestBasedLimiter($request, $rateLimit->getConfiguration($identifier)); } }