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); } $qrCode = new QrCode($shortUrl->toString($this->domainConfig)); $qrCode->setSize($this->getSizeParam($request)); $qrCode->setMargin(0); return new QrCodeResponse($qrCode); } private function getSizeParam(Request $request): int { $size = (int) $request->getAttribute('size', self::DEFAULT_SIZE); if ($size < self::MIN_SIZE) { return self::MIN_SIZE; } return $size > self::MAX_SIZE ? self::MAX_SIZE : $size; } }