/
githubmirror
/
magento2
Обзор
Документация
Войти
/
githubmirror
/
magento2
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
2.4-develop
lib/internal/Magento/Framework/Interception/Config/Config.php
226 строк
7 KB
Sam James
docs(interception): append reason to deprecation notice
05 июн 2026, 12:38
05 июн 2026, 12:38
9f58ff8
Код
Авторство
О чём код?
<?php /** * Copyright 2014 Adobe * All Rights Reserved. */ namespace Magento\Framework\Interception\Config; use Magento\Framework\Serialize\SerializerInterface; /** * Interception config. * * Responsible for providing list of plugins configured for instance */ class Config implements \Magento\Framework\Interception\ConfigInterface { /** * Type configuration * * @var \Magento\Framework\Interception\ObjectManager\ConfigInterface */ protected $_omConfig; /** * Class relations info * * @var \Magento\Framework\ObjectManager\RelationsInterface */ protected $_relations; /** * List of interceptable classes * * @var \Magento\Framework\ObjectManager\DefinitionInterface */ protected $_classDefinitions; /** * Cache * @deprecated 102.0.1 Cache handling was moved to a dedicated class * @see \Magento\Framework\Interception\Config\CacheManager * @var \Magento\Framework\Cache\FrontendInterface */ protected $_cache; /** * Cache identifier * * @var string */ protected $_cacheId; /** * Configuration reader * * @var \Magento\Framework\Config\ReaderInterface */ protected $_reader; /** * Inherited list of intercepted types * * @var array */ protected $_intercepted = []; /** * List of class types that can not be pluginized * * @var array */ protected $_serviceClassTypes = ['Interceptor']; /** * @var \Magento\Framework\Config\ScopeListInterface */ protected $_scopeList; /** * @var CacheManager */ private $cacheManager; /** @var array<string, array> */ private array $scopeReadCache = []; /** * Config constructor * * @param \Magento\Framework\Config\ReaderInterface $reader * @param \Magento\Framework\Config\ScopeListInterface $scopeList * @param \Magento\Framework\Cache\FrontendInterface $cache @deprecated * @param \Magento\Framework\ObjectManager\RelationsInterface $relations * @param \Magento\Framework\Interception\ObjectManager\ConfigInterface $omConfig * @param \Magento\Framework\ObjectManager\DefinitionInterface $classDefinitions * @param string $cacheId * @param SerializerInterface|null $serializer @deprecated * @param CacheManager $cacheManager * * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function __construct( \Magento\Framework\Config\ReaderInterface $reader, \Magento\Framework\Config\ScopeListInterface $scopeList, \Magento\Framework\Cache\FrontendInterface $cache, \Magento\Framework\ObjectManager\RelationsInterface $relations, \Magento\Framework\Interception\ObjectManager\ConfigInterface $omConfig, \Magento\Framework\ObjectManager\DefinitionInterface $classDefinitions, $cacheId = 'interception', ?SerializerInterface $serializer = null, ?CacheManager $cacheManager = null ) { $this->_omConfig = $omConfig; $this->_relations = $relations; $this->_classDefinitions = $classDefinitions; $this->_cache = $cache; $this->_cacheId = $cacheId; $this->_reader = $reader; $this->_scopeList = $scopeList; $this->cacheManager = $cacheManager ?? \Magento\Framework\App\ObjectManager::getInstance()->get(CacheManager::class); $intercepted = $this->cacheManager->load($cacheId); if ($intercepted !== null) { $this->_intercepted = $intercepted; } else { $this->initializeUncompiled($this->_classDefinitions->getClasses()); } } /** * Initialize interception config * * @param array $classDefinitions * @return void */ public function initialize($classDefinitions = []) { $this->generateIntercepted($classDefinitions); $this->cacheManager->saveCompiled($this->_cacheId, $this->_intercepted); } /** * Process interception inheritance * * @param string $type * @return bool */ protected function _inheritInterception($type) { $type = ltrim((string)$type, '\\'); if (!isset($this->_intercepted[$type])) { $realType = $this->_omConfig->getOriginalInstanceType($type); if ($type !== $realType) { if ($this->_inheritInterception($realType)) { $this->_intercepted[$type] = true; return true; } } else { $parts = explode('\\', $type); if (!in_array(end($parts), $this->_serviceClassTypes) && $this->_relations->has($type)) { $relations = $this->_relations->getParents($type); foreach ($relations as $relation) { if ($relation && $this->_inheritInterception($relation)) { $this->_intercepted[$type] = true; return true; } } } } $this->_intercepted[$type] = false; } return $this->_intercepted[$type]; } /** * @inheritdoc */ public function hasPlugins($type) { if (isset($this->_intercepted[$type])) { return $this->_intercepted[$type]; } return $this->_inheritInterception($type); } /** * Write interception config to cache * * @param array $classDefinitions */ private function initializeUncompiled($classDefinitions = []) { $this->generateIntercepted($classDefinitions); $this->cacheManager->save($this->_cacheId, $this->_intercepted); } /** * Generate intercepted array to store in compiled metadata or frontend cache * * @param array $classDefinitions */ private function generateIntercepted($classDefinitions) { $config = []; foreach ($this->_scopeList->getAllScopes() as $scope) { if (!isset($this->scopeReadCache[$scope])) { $this->scopeReadCache[$scope] = $this->_reader->read($scope); } $config = array_replace_recursive($config, $this->scopeReadCache[$scope]); } unset($config['preferences']); foreach ($config as $typeName => $typeConfig) { if (!empty($typeConfig['plugins'])) { $this->_intercepted[ltrim($typeName, '\\')] = true; } } foreach ($config as $typeName => $typeConfig) { $this->hasPlugins($typeName); } foreach ($classDefinitions as $class) { $this->hasPlugins($class); } } }