Developer.php 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\App\ObjectManager\Environment;
  7. use Magento\Framework\App\EnvironmentInterface;
  8. use Magento\Framework\Interception\ObjectManager\ConfigInterface;
  9. use Magento\Framework\App\ObjectManager;
  10. use Magento\Framework\App\Area;
  11. class Developer extends AbstractEnvironment implements EnvironmentInterface
  12. {
  13. /**#@+
  14. * Mode name
  15. */
  16. const MODE = 'developer';
  17. /**#@- */
  18. /**#@- */
  19. protected $mode = self::MODE;
  20. /**
  21. * @var ConfigInterface
  22. */
  23. protected $config;
  24. /**
  25. * @var string
  26. */
  27. protected $configPreference = \Magento\Framework\ObjectManager\Factory\Dynamic\Developer::class;
  28. /**
  29. * Returns initialized di config entity
  30. *
  31. * @return ConfigInterface
  32. */
  33. public function getDiConfig()
  34. {
  35. if (!$this->config) {
  36. $this->config = new \Magento\Framework\Interception\ObjectManager\Config\Developer(
  37. $this->envFactory->getRelations(),
  38. $this->envFactory->getDefinitions()
  39. );
  40. }
  41. return $this->config;
  42. }
  43. /**
  44. * As developer environment does not have config loader, we return null
  45. *
  46. * @return null
  47. */
  48. public function getObjectManagerConfigLoader()
  49. {
  50. return null;
  51. }
  52. /**
  53. * {inheritdoc}
  54. */
  55. public function configureObjectManager(ConfigInterface $diConfig, &$sharedInstances)
  56. {
  57. $originalSharedInstances = $sharedInstances;
  58. $objectManager = ObjectManager::getInstance();
  59. $sharedInstances[\Magento\Framework\ObjectManager\ConfigLoaderInterface::class] = $objectManager
  60. ->get(\Magento\Framework\App\ObjectManager\ConfigLoader::class);
  61. $diConfig->setCache(
  62. $objectManager->get(\Magento\Framework\App\ObjectManager\ConfigCache::class)
  63. );
  64. $objectManager->configure(
  65. $objectManager
  66. ->get(\Magento\Framework\App\ObjectManager\ConfigLoader::class)
  67. ->load(Area::AREA_GLOBAL)
  68. );
  69. $objectManager->get(\Magento\Framework\Config\ScopeInterface::class)
  70. ->setCurrentScope('global');
  71. $diConfig->setInterceptionConfig(
  72. $objectManager->get(\Magento\Framework\Interception\Config\Config::class)
  73. );
  74. /** Reset the shared instances once interception config is set so classes can be intercepted if necessary */
  75. $sharedInstances = $originalSharedInstances;
  76. $sharedInstances[\Magento\Framework\ObjectManager\ConfigLoaderInterface::class] = $objectManager
  77. ->get(\Magento\Framework\App\ObjectManager\ConfigLoader::class);
  78. }
  79. }