CleanTargetUrl.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\Store\Model\StoreSwitcher;
  8. use Magento\Store\Api\Data\StoreInterface;
  9. use Magento\Store\Api\StoreResolverInterface;
  10. use Magento\Store\Model\StoreSwitcherInterface;
  11. use Magento\Framework\Url\Helper\Data as UrlHelper;
  12. /**
  13. * Remove SID, from_store, store from target url.
  14. */
  15. class CleanTargetUrl implements StoreSwitcherInterface
  16. {
  17. /**
  18. * @var UrlHelper
  19. */
  20. private $urlHelper;
  21. /**
  22. * @var \Magento\Framework\Session\Generic
  23. */
  24. private $session;
  25. /**
  26. * @var \Magento\Framework\Session\SidResolverInterface
  27. */
  28. private $sidResolver;
  29. /**
  30. * @param UrlHelper $urlHelper
  31. * @param \Magento\Framework\Session\Generic $session
  32. * @param \Magento\Framework\Session\SidResolverInterface $sidResolver
  33. */
  34. public function __construct(
  35. UrlHelper $urlHelper,
  36. \Magento\Framework\Session\Generic $session,
  37. \Magento\Framework\Session\SidResolverInterface $sidResolver
  38. ) {
  39. $this->urlHelper = $urlHelper;
  40. $this->session = $session;
  41. $this->sidResolver = $sidResolver;
  42. }
  43. /**
  44. * @param StoreInterface $fromStore store where we came from
  45. * @param StoreInterface $targetStore store where to go to
  46. * @param string $redirectUrl original url requested for redirect after switching
  47. * @return string redirect url
  48. */
  49. public function switch(StoreInterface $fromStore, StoreInterface $targetStore, string $redirectUrl): string
  50. {
  51. $targetUrl = $redirectUrl;
  52. $sidName = $this->sidResolver->getSessionIdQueryParam($this->session);
  53. $targetUrl = $this->urlHelper->removeRequestParam($targetUrl, $sidName);
  54. $targetUrl = $this->urlHelper->removeRequestParam($targetUrl, '___from_store');
  55. $targetUrl = $this->urlHelper->removeRequestParam($targetUrl, StoreResolverInterface::PARAM_NAME);
  56. return $targetUrl;
  57. }
  58. }