DefinitionFactory.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\ObjectManager;
  7. use Magento\Framework\Filesystem\DriverInterface;
  8. use Magento\Framework\ObjectManager\Definition\Runtime;
  9. use Magento\Framework\Code\Generator\Autoloader;
  10. /**
  11. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  12. */
  13. class DefinitionFactory
  14. {
  15. /**
  16. * Class generation dir
  17. *
  18. * @var string
  19. */
  20. protected $_generationDir;
  21. /**
  22. * Filesystem Driver
  23. *
  24. * @var DriverInterface
  25. */
  26. protected $_filesystemDriver;
  27. /**
  28. * @var \Magento\Framework\Code\Generator
  29. */
  30. protected $codeGenerator;
  31. /**
  32. * @param DriverInterface $filesystemDriver
  33. * @param string $generationDir
  34. */
  35. public function __construct(
  36. DriverInterface $filesystemDriver,
  37. $generationDir
  38. ) {
  39. $this->_filesystemDriver = $filesystemDriver;
  40. $this->_generationDir = $generationDir;
  41. }
  42. /**
  43. * Create class definitions
  44. *
  45. * @return DefinitionInterface
  46. */
  47. public function createClassDefinition()
  48. {
  49. $autoloader = new Autoloader($this->getCodeGenerator());
  50. spl_autoload_register([$autoloader, 'load']);
  51. return new Runtime();
  52. }
  53. /**
  54. * Create plugin definitions
  55. *
  56. * @return \Magento\Framework\Interception\DefinitionInterface
  57. */
  58. public function createPluginDefinition()
  59. {
  60. return new \Magento\Framework\Interception\Definition\Runtime();
  61. }
  62. /**
  63. * Create relations
  64. *
  65. * @return RelationsInterface
  66. */
  67. public function createRelations()
  68. {
  69. return new \Magento\Framework\ObjectManager\Relations\Runtime();
  70. }
  71. /**
  72. * Get existing code generator. Instantiate a new one if it does not exist yet.
  73. *
  74. * @return \Magento\Framework\Code\Generator
  75. */
  76. public function getCodeGenerator()
  77. {
  78. if (!$this->codeGenerator) {
  79. $generatorIo = new \Magento\Framework\Code\Generator\Io(
  80. $this->_filesystemDriver,
  81. $this->_generationDir
  82. );
  83. $this->codeGenerator = new \Magento\Framework\Code\Generator($generatorIo);
  84. }
  85. return $this->codeGenerator;
  86. }
  87. }