/** * Create ObjectManager * * @param string $rootDir * @param array $arguments * @param bool $useCompiled * @return \Magento\Framework\ObjectManager * * @SuppressWarnings(PHPMD.NPathComplexity) */ public function create($rootDir, array $arguments, $useCompiled = true) { $directories = isset($arguments[Filesystem::PARAM_APP_DIRS]) ? $arguments[Filesystem::PARAM_APP_DIRS] : array(); $directoryList = new DirectoryList($rootDir, $directories); (new \Magento\Framework\Autoload\IncludePath())->addIncludePath(array($directoryList->getDir(Filesystem::GENERATION_DIR))); $appArguments = $this->createAppArguments($directoryList, $arguments); $definitionFactory = new \Magento\Framework\ObjectManager\DefinitionFactory(new \Magento\Framework\Filesystem\Driver\File(), $directoryList->getDir(Filesystem::DI_DIR), $directoryList->getDir(Filesystem::GENERATION_DIR), $appArguments->get('definition.format', 'serialized')); $definitions = $definitionFactory->createClassDefinition($appArguments->get('definitions'), $useCompiled); $relations = $definitionFactory->createRelations(); $configClass = $this->_configClassName; /** @var \Magento\Framework\ObjectManager\Config\Config $diConfig */ $diConfig = new $configClass($relations, $definitions); $appMode = $appArguments->get(State::PARAM_MODE, State::MODE_DEFAULT); $booleanUtils = new \Magento\Framework\Stdlib\BooleanUtils(); $argInterpreter = $this->createArgumentInterpreter($booleanUtils); $argumentMapper = new \Magento\Framework\ObjectManager\Config\Mapper\Dom($argInterpreter); $configData = $this->_loadPrimaryConfig($directoryList, $argumentMapper, $appMode); if ($configData) { $diConfig->extend($configData); } $this->factory = new \Magento\Framework\ObjectManager\Factory\Factory($diConfig, null, $definitions, $appArguments->get()); if ($appArguments->get('MAGE_PROFILER') == 2) { $this->factory = new \Magento\Framework\ObjectManager\Profiler\FactoryDecorator($this->factory, \Magento\Framework\ObjectManager\Profiler\Log::getInstance()); } $className = $this->_locatorClassName; $sharedInstances = ['Magento\\Framework\\App\\Arguments' => $appArguments, 'Magento\\Framework\\App\\Filesystem\\DirectoryList' => $directoryList, 'Magento\\Framework\\Filesystem\\DirectoryList' => $directoryList, 'Magento\\Framework\\ObjectManager\\Relations' => $relations, 'Magento\\Framework\\Interception\\Definition' => $definitionFactory->createPluginDefinition(), 'Magento\\Framework\\ObjectManager\\Config' => $diConfig, 'Magento\\Framework\\ObjectManager\\Definition' => $definitions, 'Magento\\Framework\\Stdlib\\BooleanUtils' => $booleanUtils, 'Magento\\Framework\\ObjectManager\\Config\\Mapper\\Dom' => $argumentMapper, $configClass => $diConfig]; /** @var \Magento\Framework\ObjectManager $objectManager */ $objectManager = new $className($this->factory, $diConfig, $sharedInstances); $this->factory->setObjectManager($objectManager); ObjectManager::setInstance($objectManager); /** @var \Magento\Framework\App\Filesystem\DirectoryList\Verification $verification */ $verification = $objectManager->get('Magento\\Framework\\App\\Filesystem\\DirectoryList\\Verification'); $verification->createAndVerifyDirectories(); $diConfig->setCache($objectManager->get('Magento\\Framework\\App\\ObjectManager\\ConfigCache')); $objectManager->configure($objectManager->get('Magento\\Framework\\App\\ObjectManager\\ConfigLoader')->load('global')); $objectManager->get('Magento\\Framework\\Config\\ScopeInterface')->setCurrentScope('global'); $objectManager->get('Magento\\Framework\\App\\Resource')->setCache($objectManager->get('Magento\\Framework\\App\\CacheInterface')); $interceptionConfig = $objectManager->get('Magento\\Framework\\Interception\\Config\\Config'); $diConfig->setInterceptionConfig($interceptionConfig); $this->configureDirectories($objectManager); return $objectManager; }
/** * Create ObjectManager * * @param array $arguments * @return \Magento\Framework\ObjectManagerInterface * * @SuppressWarnings(PHPMD.NPathComplexity) */ public function create(array $arguments) { $deploymentConfig = $this->createDeploymentConfig($this->directoryList, $this->configFilePool, $arguments); $arguments = array_merge($deploymentConfig->get(), $arguments); $definitionFactory = new \Magento\Framework\ObjectManager\DefinitionFactory($this->driverPool->getDriver(DriverPool::FILE), $this->directoryList->getPath(DirectoryList::DI), $this->directoryList->getPath(DirectoryList::GENERATION), $deploymentConfig->get(self::CONFIG_PATH_DEFINITION_FORMAT, Serialized::MODE_NAME)); $definitions = $definitionFactory->createClassDefinition($deploymentConfig->get('definitions')); $relations = $definitionFactory->createRelations(); /** @var EnvironmentFactory $enFactory */ $enFactory = new $this->envFactoryClassName($relations, $definitions); /** @var EnvironmentInterface $env */ $env = $enFactory->createEnvironment(); /** @var ConfigInterface $diConfig */ $diConfig = $env->getDiConfig(); $appMode = isset($arguments[State::PARAM_MODE]) ? $arguments[State::PARAM_MODE] : State::MODE_DEFAULT; $booleanUtils = new \Magento\Framework\Stdlib\BooleanUtils(); $argInterpreter = $this->createArgumentInterpreter($booleanUtils); $argumentMapper = new \Magento\Framework\ObjectManager\Config\Mapper\Dom($argInterpreter); if ($env->getMode() != Environment\Compiled::MODE) { $configData = $this->_loadPrimaryConfig($this->directoryList, $this->driverPool, $argumentMapper, $appMode); if ($configData) { $diConfig->extend($configData); } } // set cache profiler decorator if enabled if (\Magento\Framework\Profiler::isEnabled()) { $cacheFactoryArguments = $diConfig->getArguments('Magento\\Framework\\App\\Cache\\Frontend\\Factory'); $cacheFactoryArguments['decorators'][] = ['class' => 'Magento\\Framework\\Cache\\Frontend\\Decorator\\Profiler', 'parameters' => ['backendPrefixes' => ['Zend_Cache_Backend_', 'Cm_Cache_Backend_']]]; $cacheFactoryConfig = ['Magento\\Framework\\App\\Cache\\Frontend\\Factory' => ['arguments' => $cacheFactoryArguments]]; $diConfig->extend($cacheFactoryConfig); } $sharedInstances = ['Magento\\Framework\\App\\DeploymentConfig' => $deploymentConfig, 'Magento\\Framework\\App\\Filesystem\\DirectoryList' => $this->directoryList, 'Magento\\Framework\\Filesystem\\DirectoryList' => $this->directoryList, 'Magento\\Framework\\Filesystem\\DriverPool' => $this->driverPool, 'Magento\\Framework\\ObjectManager\\RelationsInterface' => $relations, 'Magento\\Framework\\Interception\\DefinitionInterface' => $definitionFactory->createPluginDefinition(), 'Magento\\Framework\\ObjectManager\\ConfigInterface' => $diConfig, 'Magento\\Framework\\Interception\\ObjectManager\\ConfigInterface' => $diConfig, 'Magento\\Framework\\ObjectManager\\DefinitionInterface' => $definitions, 'Magento\\Framework\\Stdlib\\BooleanUtils' => $booleanUtils, 'Magento\\Framework\\ObjectManager\\Config\\Mapper\\Dom' => $argumentMapper, 'Magento\\Framework\\ObjectManager\\ConfigLoaderInterface' => $env->getObjectManagerConfigLoader(), $this->_configClassName => $diConfig]; $arguments['shared_instances'] =& $sharedInstances; $this->factory = $env->getObjectManagerFactory($arguments); /** @var \Magento\Framework\ObjectManagerInterface $objectManager */ $objectManager = new $this->_locatorClassName($this->factory, $diConfig, $sharedInstances); $this->factory->setObjectManager($objectManager); ObjectManager::setInstance($objectManager); $definitionFactory->getCodeGenerator()->setObjectManager($objectManager); $env->configureObjectManager($diConfig, $sharedInstances); return $objectManager; }