RouteParamsResolver.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Url;
  7. use Magento\Framework\Url\RouteParamsResolverInterface;
  8. /**
  9. * Route params resolver.
  10. *
  11. * @method $this setType(string $type)
  12. * @method string getType()
  13. * @method $this setScope(string $scope)
  14. * @method string getScope()
  15. * @method $this setSecureIsForced(bool $isForced)
  16. * @method bool getSecureIsForced()
  17. * @method $this setSecure(bool $isForced)
  18. * @method bool getSecure()
  19. */
  20. class RouteParamsResolver extends \Magento\Framework\DataObject implements RouteParamsResolverInterface
  21. {
  22. /**
  23. * @var \Magento\Framework\App\RequestInterface
  24. */
  25. protected $request;
  26. /**
  27. * @var \Magento\Framework\Url\QueryParamsResolverInterface
  28. */
  29. protected $queryParamsResolver;
  30. /**
  31. * @var \Magento\Framework\Escaper
  32. */
  33. protected $escaper;
  34. /**
  35. * @param \Magento\Framework\App\RequestInterface $request
  36. * @param \Magento\Framework\Url\QueryParamsResolverInterface $queryParamsResolver
  37. * @param array $data
  38. */
  39. public function __construct(
  40. \Magento\Framework\App\RequestInterface $request,
  41. \Magento\Framework\Url\QueryParamsResolverInterface $queryParamsResolver,
  42. array $data = []
  43. ) {
  44. parent::__construct($data);
  45. $this->request = $request;
  46. $this->queryParamsResolver = $queryParamsResolver;
  47. }
  48. /**
  49. * {@inheritdoc}
  50. * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  51. * @SuppressWarnings(PHPMD.NPathComplexity)
  52. */
  53. public function setRouteParams(array $data, $unsetOldParams = true)
  54. {
  55. if (isset($data['_type'])) {
  56. $this->setType($data['_type']);
  57. unset($data['_type']);
  58. }
  59. if (isset($data['_forced_secure'])) {
  60. $this->setSecure((bool)$data['_forced_secure']);
  61. $this->setSecureIsForced(true);
  62. unset($data['_forced_secure']);
  63. } elseif (isset($data['_secure'])) {
  64. $this->setSecure((bool)$data['_secure']);
  65. unset($data['_secure']);
  66. }
  67. if (isset($data['_absolute'])) {
  68. unset($data['_absolute']);
  69. }
  70. if ($unsetOldParams) {
  71. $this->unsetData('route_params');
  72. }
  73. if (isset($data['_current'])) {
  74. if (is_array($data['_current'])) {
  75. foreach ($data['_current'] as $key) {
  76. if (array_key_exists($key, $data) || !$this->request->getUserParam($key)) {
  77. continue;
  78. }
  79. $data[$key] = $this->request->getUserParam($key);
  80. }
  81. } elseif ($data['_current']) {
  82. foreach ($this->request->getUserParams() as $key => $value) {
  83. if (array_key_exists($key, $data) || $this->getRouteParam($key)) {
  84. continue;
  85. }
  86. $data[$key] = $value;
  87. }
  88. foreach ($this->request->getQuery() as $key => $value) {
  89. $this->queryParamsResolver->setQueryParam($key, $value);
  90. }
  91. }
  92. unset($data['_current']);
  93. }
  94. if (isset($data['_use_rewrite'])) {
  95. unset($data['_use_rewrite']);
  96. }
  97. foreach ($data as $key => $value) {
  98. if (!is_scalar($value) || $key == 'key' || !$this->getData('escape_params')) {
  99. $this->setRouteParam($key, $value);
  100. } else {
  101. $this->setRouteParam(
  102. $this->getEscaper()->encodeUrlParam($key),
  103. $this->getEscaper()->encodeUrlParam($value)
  104. );
  105. }
  106. }
  107. return $this;
  108. }
  109. /**
  110. * {@inheritdoc}
  111. */
  112. public function setRouteParam($key, $data)
  113. {
  114. $params = $this->_getData('route_params');
  115. if (isset($params[$key]) && $params[$key] == $data) {
  116. return $this;
  117. }
  118. $params[$key] = $data;
  119. $this->unsetData('route_path');
  120. return $this->setData('route_params', $params);
  121. }
  122. /**
  123. * {@inheritdoc}
  124. */
  125. public function getRouteParams()
  126. {
  127. return $this->_getData('route_params');
  128. }
  129. /**
  130. * {@inheritdoc}
  131. */
  132. public function getRouteParam($key)
  133. {
  134. return $this->getData('route_params', $key);
  135. }
  136. /**
  137. * Get escaper
  138. *
  139. * @return \Magento\Framework\Escaper
  140. * @deprecated 101.0.0
  141. */
  142. private function getEscaper()
  143. {
  144. if ($this->escaper == null) {
  145. $this->escaper = \Magento\Framework\App\ObjectManager::getInstance()
  146. ->get(\Magento\Framework\Escaper::class);
  147. }
  148. return $this->escaper;
  149. }
  150. }