/** * @param string $xmlFile * @param string $newXmlFile * @param array $ids * @param string|null $typeAttributeName * @param string $expectedXmlFile * @dataProvider mergeDataProvider */ public function testMerge($xmlFile, $newXmlFile, $ids, $typeAttributeName, $expectedXmlFile) { $xml = file_get_contents(__DIR__ . "/_files/dom/{$xmlFile}"); $newXml = file_get_contents(__DIR__ . "/_files/dom/{$newXmlFile}"); $config = new \Magento\Framework\Config\Dom($xml, $this->validationStateMock, $ids, $typeAttributeName); $config->merge($newXml); $this->assertXmlStringEqualsXmlFile(__DIR__ . "/_files/dom/{$expectedXmlFile}", $config->getDom()->saveXML()); }
/** * Init configuration * * @param string $groupsFile * @return $this * @throws Exception */ public function init($groupsFile) { $xmlFile = $this->getRootDir() . $groupsFile; if (!is_file($xmlFile)) { throw new Exception('Invalid groups filename: ' . $xmlFile); } $xml = file_get_contents($xmlFile); $document = new \Magento\Framework\Config\Dom($xml, $this->validationState); if (!$document->validate($this->getRootDir() . 'etc/' . self::CONFIGURATION_SCHEMA)) { throw new Exception('XML file is invalid.'); } $this->xml = new \DOMXPath($document->getDom()); return $this; }
/** * Init configuration * * @param string $mapFile * @return $this * @throws Exception */ protected function init($mapFile) { $this->ignoredDocuments = []; $this->wildcards = null; $configFile = $this->getRootDir() . $mapFile; if (!is_file($configFile)) { throw new Exception('Invalid map filename: ' . $configFile); } $xml = file_get_contents($configFile); $document = new \Magento\Framework\Config\Dom($xml); if (!$document->validate($this->getRootDir() . 'etc/' . self::CONFIGURATION_SCHEMA)) { throw new Exception('XML file is invalid.'); } $this->xml = new \DOMXPath($document->getDom()); return $this; }
/** * Validating xml file * * @return $this * @throws Exception */ protected function validate() { $mapFile = $this->config->getOption(self::MAP_FILE_OPTION); $rootDir = dirname(dirname(dirname(__DIR__))) . DIRECTORY_SEPARATOR; $configFile = $rootDir . $mapFile; if (!is_file($configFile)) { throw new Exception('Invalid map filename: ' . $configFile); } $xml = file_get_contents($configFile); $document = $document = new \Magento\Framework\Config\Dom($xml, new \Magento\Framework\App\Arguments\ValidationState(\Magento\Framework\App\State::MODE_DEVELOPER)); if (!$document->validate($rootDir . 'etc/' . self::CONFIGURATION_SCHEMA)) { throw new Exception('XML file is invalid.'); } $this->xml = new \DOMXPath($document->getDom()); return $this; }
/** * Init configuration * * @param string $configFile * @return $this * @throws Exception */ public function init($configFile = null) { if ($configFile === null) { $configFile = $this->getConfigDirectoryPath() . self::CONFIGURATION_FILE; } if (empty($configFile) || !file_exists($configFile)) { throw new Exception('Invalid config filename: ' . $configFile); } $xml = file_get_contents($configFile); $document = new \Magento\Framework\Config\Dom($xml); if (!$document->validate($this->getConfigDirectoryPath() . self::CONFIGURATION_SCHEMA)) { throw new Exception('XML file is invalid.'); } $this->config = new \DOMXPath($document->getDom()); $this->options = null; return $this; }
/** * Load configuration * * @return array */ public function load() { $localConfig = new \Magento\Framework\Config\Dom('<config/>', $this->_idAttributes); $localConfigFile = $this->_dir . '/' . self::LOCAL_CONFIG_FILE; if (file_exists($localConfigFile)) { // 1. app/etc/local.xml $localConfig->merge(file_get_contents($localConfigFile)); // 2. app/etc/<dir>/<file>.xml if (preg_match('/^[a-z\\d_-]+(\\/|\\\\)+[a-z\\d_-]+\\.xml$/', $this->_customFile)) { $localConfigExtraFile = $this->_dir . '/' . $this->_customFile; $localConfig->merge(file_get_contents($localConfigExtraFile)); } } $arrayNodeConfig = new \Magento\Framework\Config\Dom\ArrayNodeConfig(new \Magento\Framework\Config\Dom\NodePathMatcher(), $this->_idAttributes); $converter = new \Magento\Framework\Config\Converter\Dom\Flat($arrayNodeConfig); $result = $converter->convert($localConfig->getDom()); return !empty($result['config']) ? $result['config'] : array(); }
/** * Validating xml file * * @return $this * @throws Exception */ protected function validate() { $mapFile = $this->config->getOption(self::MAP_FILE_OPTION); $rootDir = dirname(dirname(dirname(__DIR__))) . DIRECTORY_SEPARATOR; $configFile = $rootDir . $mapFile; if (!is_file($configFile)) { throw new Exception('Invalid map filename: ' . $configFile); } $xml = file_get_contents($configFile); $document = $document = new \Magento\Framework\Config\Dom($xml, new \Magento\Framework\App\Arguments\ValidationState(\Magento\Framework\App\State::MODE_DEVELOPER)); $schemaFileName = $rootDir . 'etc/' . self::CONFIGURATION_SCHEMA; if (!$document->validate($schemaFileName)) { $errors = $document->validateDomDocument($document->getDom(), $schemaFileName, $document::ERROR_FORMAT_DEFAULT); foreach ($errors as $error) { echo $error . PHP_EOL; } throw new Exception('XML file is invalid.'); } $this->xml = new \DOMXPath($document->getDom()); return $this; }