Devo generare un .xmlfile dalla mia estensione. Namespace/Module/view/adminhtml/ui_component/Cartella interna ,
Devo farlo in modo grammaticale perché il .xmlfile verrà generato in base alla raccolta dei dati, c'è un modo per farlo?
Devo generare un .xmlfile dalla mia estensione. Namespace/Module/view/adminhtml/ui_component/Cartella interna ,
Devo farlo in modo grammaticale perché il .xmlfile 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>