Мне нужно создать .xml
файл из моего расширения. Внутри Namespace/Module/view/adminhtml/ui_component/
папки,
Мне нужно сделать это программно, потому что .xml
файл будет создан на основе сбора данных, есть ли способ сделать это?
Мне нужно создать .xml
файл из моего расширения. Внутри Namespace/Module/view/adminhtml/ui_component/
папки,
Мне нужно сделать это программно, потому что .xml
файл будет создан на основе сбора данных, есть ли способ сделать это?
Ответы:
Сейчас я использую исходную функцию php для записи / создания файла в моем каталоге расширений, например так:
public function __construct(
\Magento\Framework\Module\Dir\Reader $moduleReader
)
{
$this->customAttribute = $customAttribute;
$baseDir = $moduleReader->getModuleDir('', 'Namespace_Module');
$this->dir = $baseDir . '/view/adminhtml/ui_component';
}
public function writeFile() {
$dir = $this->dir;
$fileName = 'test.xml';
$content = '<test>Test</test>';
$myfile = fopen($dir . '/' . $fileName, "w") or die("Unable to open file!");
try {
fwrite($myfile, $content);
fclose($myfile);
} catch (Exception $e) {
$this->_logger($e->getMessage());
}
return;
}
если есть более правильный способ сделать это в Magento 2, пожалуйста, дайте мне знать, и я приму ответ на этот вопрос, но сейчас, если кто-то захочет использовать это в качестве решения, он работает правильно для меня, но я не рекомендую его
Если вы хотите попробовать другой способ, возможно, используйте Magento \ Framework \ Filesystem \ Io \ File и Magento \ Framework \ Convert \ ConvertArray. ConvertArray полезен для создания XML-файла из многомерного массива, и File может написать его для вас (и проверить права доступа, создать каталоги и многое другое). Вот основной пример:
public function __construct(
\Magento\Framework\Filesystem\Io\File $file,
\Magento\Framework\Convert\ConvertArray $convertArray
)
{
$this->file = $file;
$this->convertArray = $convertArray;
}
public function createMyXmlFile($assocArray, $rootNodeName, $filename = 'file.xml')
{
// ConvertArray function assocToXml to create SimpleXMLElement
$simpleXmlContents = $this->convertArray->assocToXml($assocArray,rootNodeName);
// convert it to xml using asXML() function
$content = $simpleXmlContents->asXML();
$this->file->write($filename, $contents);
}
если мой массив:
$myArray = array(
'fruit' => 'apple',
'vegetables' => array('vegetable_1' => 'carrot', 'vegetable_2' => 'tomato'),
'meat' => 'none',
'sweets' => 'chocolate');
и я называю свою функцию:
$simpleXmlContents = $this->convertArray->assocToXml($myArray, 'diner');
$this->file->write($myXmlFile,$simpleXmlContents->asXML());
Я бы получил следующее в myfile.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<diner><fruit>apple</fruit><vegetables><vegetable_1>carrot</vegetable_1>
<vegetable_2>tomato</vegetable_2></vegetables><meat>none</meat>
<sweets>chocolate</sweets></diner>