vendor/symfony/web-link/Link.php line 16

  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <fabien@symfony.com>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Symfony\Component\WebLink;
  11. use Psr\Link\EvolvableLinkInterface;
  12. class Link implements EvolvableLinkInterface
  13. {
  14.     // Relations defined in https://www.w3.org/TR/html5/links.html#links and applicable on link elements
  15.     public const REL_ALTERNATE 'alternate';
  16.     public const REL_AUTHOR 'author';
  17.     public const REL_HELP 'help';
  18.     public const REL_ICON 'icon';
  19.     public const REL_LICENSE 'license';
  20.     public const REL_SEARCH 'search';
  21.     public const REL_STYLESHEET 'stylesheet';
  22.     public const REL_NEXT 'next';
  23.     public const REL_PREV 'prev';
  24.     // Relation defined in https://www.w3.org/TR/preload/
  25.     public const REL_PRELOAD 'preload';
  26.     // Relations defined in https://www.w3.org/TR/resource-hints/
  27.     public const REL_DNS_PREFETCH 'dns-prefetch';
  28.     public const REL_PRECONNECT 'preconnect';
  29.     public const REL_PREFETCH 'prefetch';
  30.     public const REL_PRERENDER 'prerender';
  31.     // Extra relations
  32.     public const REL_MERCURE 'mercure';
  33.     private string $href '';
  34.     /**
  35.      * @var string[]
  36.      */
  37.     private array $rel = [];
  38.     /**
  39.      * @var array<string, string|bool|string[]>
  40.      */
  41.     private array $attributes = [];
  42.     public function __construct(string $rel nullstring $href '')
  43.     {
  44.         if (null !== $rel) {
  45.             $this->rel[$rel] = $rel;
  46.         }
  47.         $this->href $href;
  48.     }
  49.     public function getHref(): string
  50.     {
  51.         return $this->href;
  52.     }
  53.     public function isTemplated(): bool
  54.     {
  55.         return $this->hrefIsTemplated($this->href);
  56.     }
  57.     public function getRels(): array
  58.     {
  59.         return array_values($this->rel);
  60.     }
  61.     public function getAttributes(): array
  62.     {
  63.         return $this->attributes;
  64.     }
  65.     public function withHref(string|\Stringable $href): static
  66.     {
  67.         $that = clone $this;
  68.         $that->href $href;
  69.         return $that;
  70.     }
  71.     public function withRel(string $rel): static
  72.     {
  73.         $that = clone $this;
  74.         $that->rel[$rel] = $rel;
  75.         return $that;
  76.     }
  77.     public function withoutRel(string $rel): static
  78.     {
  79.         $that = clone $this;
  80.         unset($that->rel[$rel]);
  81.         return $that;
  82.     }
  83.     public function withAttribute(string $attributestring|\Stringable|int|float|bool|array $value): static
  84.     {
  85.         $that = clone $this;
  86.         $that->attributes[$attribute] = $value;
  87.         return $that;
  88.     }
  89.     public function withoutAttribute(string $attribute): static
  90.     {
  91.         $that = clone $this;
  92.         unset($that->attributes[$attribute]);
  93.         return $that;
  94.     }
  95.     private function hrefIsTemplated(string $href): bool
  96.     {
  97.         return str_contains($href'{') || str_contains($href'}');
  98.     }
  99. }