Reader.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. /**
  3. * Default configuration data reader. Reads configuration data from storage
  4. *
  5. * Copyright © Magento, Inc. All rights reserved.
  6. * See COPYING.txt for license details.
  7. */
  8. namespace Magento\Framework\App\Config\Initial;
  9. class Reader
  10. {
  11. /**
  12. * File locator
  13. *
  14. * @var \Magento\Framework\Config\FileResolverInterface
  15. */
  16. protected $_fileResolver;
  17. /**
  18. * Config converter
  19. *
  20. * @var \Magento\Framework\Config\ConverterInterface
  21. */
  22. protected $_converter;
  23. /**
  24. * Config file name
  25. *
  26. * @var string
  27. */
  28. protected $_fileName;
  29. /**
  30. * Class of dom configuration document used for merge
  31. *
  32. * @var string
  33. */
  34. protected $_domDocumentClass;
  35. /**
  36. * Scope priority loading scheme
  37. *
  38. * @var array
  39. */
  40. protected $_scopePriorityScheme = ['global'];
  41. /**
  42. * Path to corresponding XSD file with validation rules for config
  43. *
  44. * @var string
  45. */
  46. protected $_schemaFile;
  47. /**
  48. * @param \Magento\Framework\Config\FileResolverInterface $fileResolver
  49. * @param \Magento\Framework\Config\ConverterInterface $converter
  50. * @param SchemaLocator $schemaLocator
  51. * @param \Magento\Framework\Config\DomFactory $domFactory
  52. * @param string $fileName
  53. * @param string $domDocumentClass
  54. */
  55. public function __construct(
  56. \Magento\Framework\Config\FileResolverInterface $fileResolver,
  57. \Magento\Framework\Config\ConverterInterface $converter,
  58. SchemaLocator $schemaLocator,
  59. \Magento\Framework\Config\DomFactory $domFactory,
  60. $fileName = 'config.xml'
  61. ) {
  62. $this->_schemaFile = $schemaLocator->getSchema();
  63. $this->_fileResolver = $fileResolver;
  64. $this->_converter = $converter;
  65. $this->domFactory = $domFactory;
  66. $this->_fileName = $fileName;
  67. }
  68. /**
  69. * Read configuration scope
  70. *
  71. * @return array
  72. *
  73. * @throws \Magento\Framework\Exception\LocalizedException
  74. */
  75. public function read()
  76. {
  77. $fileList = [];
  78. foreach ($this->_scopePriorityScheme as $scope) {
  79. $directories = $this->_fileResolver->get($this->_fileName, $scope);
  80. foreach ($directories as $key => $directory) {
  81. $fileList[$key] = $directory;
  82. }
  83. }
  84. if (!count($fileList)) {
  85. return [];
  86. }
  87. /** @var \Magento\Framework\Config\Dom $domDocument */
  88. $domDocument = null;
  89. foreach ($fileList as $file) {
  90. try {
  91. if (!$domDocument) {
  92. $domDocument = $this->domFactory->createDom(['xml' => $file, 'schemaFile' => $this->_schemaFile]);
  93. } else {
  94. $domDocument->merge($file);
  95. }
  96. } catch (\Magento\Framework\Config\Dom\ValidationException $e) {
  97. throw new \Magento\Framework\Exception\LocalizedException(
  98. new \Magento\Framework\Phrase(
  99. 'The XML in file "%1" is invalid:' . "\n%2\nVerify the XML and try again.",
  100. [$file, $e->getMessage()]
  101. )
  102. );
  103. }
  104. }
  105. $output = [];
  106. if ($domDocument) {
  107. $output = $this->_converter->convert($domDocument->getDom());
  108. }
  109. return $output;
  110. }
  111. }