vendor/contao/core-bundle/src/Routing/ResponseContext/HtmlHeadBag/HtmlHeadBag.php line 17

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4.  * This file is part of Contao.
  5.  *
  6.  * (c) Leo Feyer
  7.  *
  8.  * @license LGPL-3.0-or-later
  9.  */
  10. namespace Contao\CoreBundle\Routing\ResponseContext\HtmlHeadBag;
  11. use Symfony\Component\HttpFoundation\Request;
  12. final class HtmlHeadBag
  13. {
  14.     private string $title '';
  15.     private string $metaDescription '';
  16.     private string $metaRobots 'index,follow';
  17.     private string $canonicalUri '';
  18.     private array $keepParamsForCanonical = [];
  19.     public function getTitle(): string
  20.     {
  21.         return $this->title;
  22.     }
  23.     public function setTitle(string $title): self
  24.     {
  25.         $this->title $title;
  26.         return $this;
  27.     }
  28.     public function getMetaDescription(): string
  29.     {
  30.         return $this->metaDescription;
  31.     }
  32.     public function setMetaDescription(string $metaDescription): self
  33.     {
  34.         $this->metaDescription $metaDescription;
  35.         return $this;
  36.     }
  37.     public function getMetaRobots(): string
  38.     {
  39.         return $this->metaRobots;
  40.     }
  41.     public function setMetaRobots(string $metaRobots): self
  42.     {
  43.         $this->metaRobots $metaRobots;
  44.         return $this;
  45.     }
  46.     public function setKeepParamsForCanonical(array $keepParamsForCanonical): self
  47.     {
  48.         $this->keepParamsForCanonical $keepParamsForCanonical;
  49.         return $this;
  50.     }
  51.     public function getKeepParamsForCanonical(): array
  52.     {
  53.         return $this->keepParamsForCanonical;
  54.     }
  55.     public function addKeepParamsForCanonical(string $param): self
  56.     {
  57.         $this->keepParamsForCanonical[] = $param;
  58.         return $this;
  59.     }
  60.     public function setCanonicalUri(string $canonicalUri): self
  61.     {
  62.         $this->canonicalUri $canonicalUri;
  63.         return $this;
  64.     }
  65.     public function getCanonicalUri(): string
  66.     {
  67.         return $this->canonicalUri;
  68.     }
  69.     public function getCanonicalUriForRequest(Request $request): string
  70.     {
  71.         if ($this->canonicalUri) {
  72.             // Make sure the custom URI is normalized as well
  73.             return Request::create($this->canonicalUri)->getUri();
  74.         }
  75.         $params = [];
  76.         foreach ($request->query->all() as $originalParam => $value) {
  77.             foreach ($this->getKeepParamsForCanonical() as $param) {
  78.                 $regex sprintf('/^%s$/'str_replace('\*''.*'preg_quote($param'/')));
  79.                 if (preg_match($regex$originalParam)) {
  80.                     $params[$originalParam] = $value;
  81.                 }
  82.             }
  83.         }
  84.         $request Request::create(
  85.             $request->getSchemeAndHttpHost().$request->getBaseUrl().$request->getPathInfo(),
  86.             $request->getMethod(),
  87.             $params
  88.         );
  89.         return $request->getUri();
  90.     }
  91. }