123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Framework\Config\Data;
- use Magento\Framework\Serialize\SerializerInterface;
- use Magento\Framework\App\ObjectManager;
- /**
- * Provides scoped configuration
- * @api
- * @since 100.0.2
- */
- class Scoped extends \Magento\Framework\Config\Data
- {
- /**
- * Configuration scope resolver
- *
- * @var \Magento\Framework\Config\ScopeInterface
- */
- protected $_configScope;
- /**
- * Configuration reader
- *
- * @var \Magento\Framework\Config\ReaderInterface
- */
- protected $_reader;
- /**
- * Configuration cache
- *
- * @var \Magento\Framework\Config\CacheInterface
- */
- protected $_cache;
- /**
- * Cache tag
- *
- * @var string
- */
- protected $_cacheId;
- /**
- * Scope priority loading scheme
- *
- * @var string[]
- */
- protected $_scopePriorityScheme = [];
- /**
- * Loaded scopes
- *
- * @var array
- */
- protected $_loadedScopes = [];
- /**
- * @var SerializerInterface
- */
- private $serializer;
- /**
- * Constructor
- *
- * @param \Magento\Framework\Config\ReaderInterface $reader
- * @param \Magento\Framework\Config\ScopeInterface $configScope
- * @param \Magento\Framework\Config\CacheInterface $cache
- * @param string $cacheId
- * @param SerializerInterface|null $serializer
- */
- public function __construct(
- \Magento\Framework\Config\ReaderInterface $reader,
- \Magento\Framework\Config\ScopeInterface $configScope,
- \Magento\Framework\Config\CacheInterface $cache,
- $cacheId,
- SerializerInterface $serializer = null
- ) {
- $this->_reader = $reader;
- $this->_configScope = $configScope;
- $this->_cache = $cache;
- $this->_cacheId = $cacheId;
- $this->serializer = $serializer ?: ObjectManager::getInstance()->get(SerializerInterface::class);
- }
- /**
- * Get config value by key
- *
- * @param string $path
- * @param mixed $default
- * @return array|mixed|null
- */
- public function get($path = null, $default = null)
- {
- $this->_loadScopedData();
- return parent::get($path, $default);
- }
- /**
- * Load data for current scope
- *
- * @return void
- */
- protected function _loadScopedData()
- {
- $scope = $this->_configScope->getCurrentScope();
- if (false == isset($this->_loadedScopes[$scope])) {
- if (false == in_array($scope, $this->_scopePriorityScheme)) {
- $this->_scopePriorityScheme[] = $scope;
- }
- foreach ($this->_scopePriorityScheme as $scopeCode) {
- if (false == isset($this->_loadedScopes[$scopeCode])) {
- if ($scopeCode !== 'primary' && ($data = $this->_cache->load($scopeCode . '::' . $this->_cacheId))
- ) {
- $data = $this->serializer->unserialize($data);
- } else {
- $data = $this->_reader->read($scopeCode);
- if ($scopeCode !== 'primary') {
- $this->_cache->save(
- $this->serializer->serialize($data),
- $scopeCode . '::' . $this->_cacheId
- );
- }
- }
- $this->merge($data);
- $this->_loadedScopes[$scopeCode] = true;
- }
- if ($scopeCode == $scope) {
- break;
- }
- }
- }
- }
- }
|