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

Open in your IDE?
  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.     /**
  50.      * {@inheritdoc}
  51.      */
  52.     public function getHref(): string
  53.     {
  54.         return $this->href;
  55.     }
  56.     /**
  57.      * {@inheritdoc}
  58.      */
  59.     public function isTemplated(): bool
  60.     {
  61.         return $this->hrefIsTemplated($this->href);
  62.     }
  63.     /**
  64.      * {@inheritdoc}
  65.      */
  66.     public function getRels(): array
  67.     {
  68.         return array_values($this->rel);
  69.     }
  70.     /**
  71.      * {@inheritdoc}
  72.      */
  73.     public function getAttributes(): array
  74.     {
  75.         return $this->attributes;
  76.     }
  77.     /**
  78.      * {@inheritdoc}
  79.      */
  80.     public function withHref(string|\Stringable $href): static
  81.     {
  82.         $that = clone $this;
  83.         $that->href $href;
  84.         return $that;
  85.     }
  86.     /**
  87.      * {@inheritdoc}
  88.      */
  89.     public function withRel(string $rel): static
  90.     {
  91.         $that = clone $this;
  92.         $that->rel[$rel] = $rel;
  93.         return $that;
  94.     }
  95.     /**
  96.      * {@inheritdoc}
  97.      */
  98.     public function withoutRel(string $rel): static
  99.     {
  100.         $that = clone $this;
  101.         unset($that->rel[$rel]);
  102.         return $that;
  103.     }
  104.     /**
  105.      * {@inheritdoc}
  106.      */
  107.     public function withAttribute(string $attributestring|\Stringable|int|float|bool|array $value): static
  108.     {
  109.         $that = clone $this;
  110.         $that->attributes[$attribute] = $value;
  111.         return $that;
  112.     }
  113.     /**
  114.      * {@inheritdoc}
  115.      */
  116.     public function withoutAttribute(string $attribute): static
  117.     {
  118.         $that = clone $this;
  119.         unset($that->attributes[$attribute]);
  120.         return $that;
  121.     }
  122.     private function hrefIsTemplated(string $href): bool
  123.     {
  124.         return str_contains($href'{') || str_contains($href'}');
  125.     }
  126. }