RouteParamsResolver.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Store\Url\Plugin;
  7. use \Magento\Store\Model\Store;
  8. use \Magento\Store\Api\Data\StoreInterface;
  9. use \Magento\Store\Model\ScopeInterface as StoreScopeInterface;
  10. /**
  11. * Plugin for \Magento\Framework\Url\RouteParamsResolver
  12. */
  13. class RouteParamsResolver
  14. {
  15. /**
  16. * @var \Magento\Framework\App\Config\ScopeConfigInterface
  17. */
  18. protected $scopeConfig;
  19. /**
  20. * @var \Magento\Store\Model\StoreManagerInterface
  21. */
  22. protected $storeManager;
  23. /**
  24. * @var \Magento\Framework\Url\QueryParamsResolverInterface
  25. */
  26. protected $queryParamsResolver;
  27. /**
  28. * Initialize dependencies.
  29. *
  30. * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
  31. * @param \Magento\Store\Model\StoreManagerInterface $storeManager
  32. * @param \Magento\Framework\Url\QueryParamsResolverInterface $queryParamsResolver
  33. */
  34. public function __construct(
  35. \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
  36. \Magento\Store\Model\StoreManagerInterface $storeManager,
  37. \Magento\Framework\Url\QueryParamsResolverInterface $queryParamsResolver
  38. ) {
  39. $this->scopeConfig = $scopeConfig;
  40. $this->storeManager = $storeManager;
  41. $this->queryParamsResolver = $queryParamsResolver;
  42. }
  43. /**
  44. * Process scope query parameters.
  45. *
  46. * @param \Magento\Framework\Url\RouteParamsResolver $subject
  47. * @param array $data
  48. * @param bool $unsetOldParams
  49. * @throws \Magento\Framework\Exception\NoSuchEntityException
  50. *
  51. * @return array
  52. */
  53. public function beforeSetRouteParams(
  54. \Magento\Framework\Url\RouteParamsResolver $subject,
  55. array $data,
  56. $unsetOldParams = true
  57. ) {
  58. if (isset($data['_scope'])) {
  59. $subject->setScope($data['_scope']);
  60. unset($data['_scope']);
  61. }
  62. if (isset($data['_scope_to_url']) && (bool)$data['_scope_to_url'] === true) {
  63. /** @var StoreInterface $currentScope */
  64. $currentScope = $subject->getScope();
  65. $storeCode = $currentScope && $currentScope instanceof StoreInterface ?
  66. $currentScope->getCode() :
  67. $this->storeManager->getStore()->getCode();
  68. $useStoreInUrl = $this->scopeConfig->getValue(
  69. Store::XML_PATH_STORE_IN_URL,
  70. StoreScopeInterface::SCOPE_STORE,
  71. $storeCode
  72. );
  73. if (!$useStoreInUrl && !$this->storeManager->hasSingleStore()) {
  74. $this->queryParamsResolver->setQueryParam('___store', $storeCode);
  75. }
  76. }
  77. unset($data['_scope_to_url']);
  78. return [$data, $unsetOldParams];
  79. }
  80. }