ScopeCodeResolver.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\App\Config;
  7. use Magento\Framework\App\ScopeResolverPool;
  8. /**
  9. * Class for resolving scope code
  10. */
  11. class ScopeCodeResolver
  12. {
  13. /**
  14. * @var ScopeResolverPool
  15. */
  16. private $scopeResolverPool;
  17. /**
  18. * @var array
  19. */
  20. private $resolvedScopeCodes = [];
  21. /**
  22. * @param ScopeResolverPool $scopeResolverPool
  23. */
  24. public function __construct(ScopeResolverPool $scopeResolverPool)
  25. {
  26. $this->scopeResolverPool = $scopeResolverPool;
  27. }
  28. /**
  29. * Resolve scope code
  30. *
  31. * @param string $scopeType
  32. * @param string $scopeCode
  33. * @return string
  34. */
  35. public function resolve($scopeType, $scopeCode)
  36. {
  37. if (isset($this->resolvedScopeCodes[$scopeType][$scopeCode])) {
  38. return $this->resolvedScopeCodes[$scopeType][$scopeCode];
  39. }
  40. if (($scopeCode === null || is_numeric($scopeCode))
  41. && $scopeType !== ScopeConfigInterface::SCOPE_TYPE_DEFAULT
  42. ) {
  43. $scopeResolver = $this->scopeResolverPool->get($scopeType);
  44. $resolverScopeCode = $scopeResolver->getScope($scopeCode);
  45. } else {
  46. $resolverScopeCode = $scopeCode;
  47. }
  48. if ($resolverScopeCode instanceof \Magento\Framework\App\ScopeInterface) {
  49. $resolverScopeCode = $resolverScopeCode->getCode();
  50. }
  51. $this->resolvedScopeCodes[$scopeType][$scopeCode] = $resolverScopeCode;
  52. return $resolverScopeCode;
  53. }
  54. /**
  55. * Clean resolvedScopeCodes, store codes may have been renamed
  56. *
  57. * @return void
  58. */
  59. public function clean()
  60. {
  61. $this->resolvedScopeCodes = [];
  62. }
  63. }