ShortUrlStringifier.php 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. <?php
  2. declare(strict_types=1);
  3. namespace Shlinkio\Shlink\Core\ShortUrl\Helper;
  4. use Laminas\Diactoros\Uri;
  5. use Shlinkio\Shlink\Core\Entity\ShortUrl;
  6. use function sprintf;
  7. class ShortUrlStringifier implements ShortUrlStringifierInterface
  8. {
  9. private array $domainConfig;
  10. private string $basePath;
  11. public function __construct(array $domainConfig, string $basePath = '')
  12. {
  13. $this->domainConfig = $domainConfig;
  14. $this->basePath = $basePath;
  15. }
  16. public function stringify(ShortUrl $shortUrl): string
  17. {
  18. return (new Uri())->withPath($shortUrl->getShortCode())
  19. ->withScheme($this->domainConfig['schema'] ?? 'http')
  20. ->withHost($this->resolveDomain($shortUrl))
  21. ->__toString();
  22. }
  23. private function resolveDomain(ShortUrl $shortUrl): string
  24. {
  25. $domain = $shortUrl->getDomain();
  26. if ($domain === null) {
  27. return $this->domainConfig['hostname'] ?? '';
  28. }
  29. return sprintf('%s%s', $domain->getAuthority(), $this->basePath);
  30. }
  31. }