'id', '/config/system/section' => 'id', '/config/system/section(/group)+' => 'id', '/config/system/section(/group)+/field' => 'id', '/config/system/section(/group)+/field/depends/field' => 'id', '/config/system/section(/group)+/field/options/option' => 'label', ]; /** * @var CompilerInterface */ protected $compiler; /** * Constructor * * @param \Magento\Framework\Config\FileResolverInterface $fileResolver * @param Converter $converter * @param \Magento\Config\Model\Config\SchemaLocator $schemaLocator * @param \Magento\Framework\Config\ValidationStateInterface $validationState * @param CompilerInterface $compiler * @param string $fileName * @param array $idAttributes * @param string $domDocumentClass * @param string $defaultScope */ public function __construct( \Magento\Framework\Config\FileResolverInterface $fileResolver, Converter $converter, \Magento\Config\Model\Config\SchemaLocator $schemaLocator, \Magento\Framework\Config\ValidationStateInterface $validationState, CompilerInterface $compiler, $fileName = 'system.xml', $idAttributes = [], $domDocumentClass = \Magento\Framework\Config\Dom::class, $defaultScope = 'global' ) { $this->compiler = $compiler; parent::__construct( $fileResolver, $converter, $schemaLocator, $validationState, $fileName, $idAttributes, $domDocumentClass, $defaultScope ); } /** * Read configuration files * * @param array $fileList * @return array * @throws LocalizedException */ protected function _readFiles($fileList) { /** @var \Magento\Framework\Config\Dom $configMerger */ $configMerger = null; foreach ($fileList as $key => $content) { try { $content = $this->processingDocument($content); if (!$configMerger) { $configMerger = $this->_createConfigMerger($this->_domDocumentClass, $content); } else { $configMerger->merge($content); } } catch (\Magento\Framework\Config\Dom\ValidationException $e) { throw new LocalizedException( new \Magento\Framework\Phrase( 'The XML in file "%1" is invalid:' . "\n%2\nVerify the XML and try again.", [$key, $e->getMessage()] ) ); } } if ($this->validationState->isValidationRequired()) { $errors = []; if ($configMerger && !$configMerger->validate($this->_schemaFile, $errors)) { $message = "Invalid Document \n"; throw new LocalizedException( new \Magento\Framework\Phrase($message . implode("\n", $errors)) ); } } $output = []; if ($configMerger) { $output = $this->_converter->convert($configMerger->getDom()); } return $output; } /** * Processing nodes of the document before merging * * @param string $content * @throws \Magento\Framework\Config\Dom\ValidationException * @return string */ protected function processingDocument($content) { $object = new DataObject(); $document = new \DOMDocument(); try { $document->loadXML($content); } catch (\Exception $e) { throw new \Magento\Framework\Config\Dom\ValidationException($e->getMessage()); } $this->compiler->compile($document->documentElement, $object, $object); return $document->saveXML(); } }