urlResolver = $urlResolver; $this->domainConfig = $domainConfig; $this->logger = $logger ?? new NullLogger(); } public function process(Request $request, RequestHandlerInterface $handler): Response { $identifier = ShortUrlIdentifier::fromRedirectRequest($request); try { $shortUrl = $this->urlResolver->resolveEnabledShortUrl($identifier); } catch (ShortUrlNotFoundException $e) { $this->logger->warning('An error occurred while creating QR code. {e}', ['e' => $e]); return $handler->handle($request); } $query = $request->getQueryParams(); // Size attribute is deprecated $size = $this->normalizeSize((int) $request->getAttribute('size', $query['size'] ?? self::DEFAULT_SIZE)); $qrCode = new QrCode($shortUrl->toString($this->domainConfig)); $qrCode->setSize($size); $qrCode->setMargin(0); $format = $query['format'] ?? 'png'; if ($format === 'svg') { $qrCode->setWriter(new SvgWriter()); } return new QrCodeResponse($qrCode); } private function normalizeSize(int $size): int { if ($size < self::MIN_SIZE) { return self::MIN_SIZE; } return $size > self::MAX_SIZE ? self::MAX_SIZE : $size; } }