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. }