router = $router; $this->urlResolver = $urlResolver; $this->logger = $logger ?: new NullLogger(); } public function process(Request $request, RequestHandlerInterface $handler): Response { // Make sure the short URL exists for this short code $shortCode = $request->getAttribute('shortCode'); $domain = $request->getUri()->getAuthority(); try { $this->urlResolver->shortCodeToEnabledShortUrl($shortCode, $domain); } catch (ShortUrlNotFoundException $e) { $this->logger->warning('An error occurred while creating QR code. {e}', ['e' => $e]); return $handler->handle($request); } $path = $this->router->generateUri(RedirectAction::class, ['shortCode' => $shortCode]); $size = $this->getSizeParam($request); $qrCode = new QrCode((string) $request->getUri()->withPath($path)->withQuery('')); $qrCode->setSize($size); $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; } }