Devo generare un .xml
file dalla mia estensione. Namespace/Module/view/adminhtml/ui_component/
Cartella interna ,
Devo farlo in modo grammaticale perché il .xml
file verrà generato in base alla raccolta dei dati, c'è un modo per farlo?
Devo generare un .xml
file dalla mia estensione. Namespace/Module/view/adminhtml/ui_component/
Cartella interna ,
Devo farlo in modo grammaticale perché il .xml
file verrà generato in base alla raccolta dei dati, c'è un modo per farlo?
Risposte:
Per ora sto usando la funzione php originale per scrivere / creare file nella mia directory di estensione in questo modo:
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;
}
se c'è un modo più appropriato per farlo in Magento 2, per favore fatemelo sapere e accetterò la risposta a questa domanda, ma per ora se qualcuno vuole usarlo come soluzione funziona correttamente per me ma non lo consiglio
Se vuoi provare un altro modo, usa Magento \ Framework \ Filesystem \ Io \ File e Magento \ Framework \ Convert \ ConvertArray. ConvertArray è utile per creare un file xml da un array multidimensionale e File può scriverlo per te (e controllare i permessi, creare directory e altro). Ecco un esempio di base:
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);
}
se il mio array è:
$myArray = array(
'fruit' => 'apple',
'vegetables' => array('vegetable_1' => 'carrot', 'vegetable_2' => 'tomato'),
'meat' => 'none',
'sweets' => 'chocolate');
e chiamo la mia funzione:
$simpleXmlContents = $this->convertArray->assocToXml($myArray, 'diner');
$this->file->write($myXmlFile,$simpleXmlContents->asXML());
Vorrei ottenere quanto segue in 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>