Générer un fichier xml par programme


8

J'ai besoin de générer un .xmlfichier à partir de mon extension. Namespace/Module/view/adminhtml/ui_component/Dossier intérieur ,

Je dois le faire de manière pro-grammaticale car le .xmlfichier sera généré en fonction de la collecte de données, existe-t-il un moyen de le faire?


ce n'est jamais une bonne idée de générer les fichiers de mise en page à la volée. Cela bousille votre versioning. Expliquez le problème que vous essayez de résoudre au lieu de l'approche que vous avez adoptée. Il existe peut-être une autre façon de le résoudre sans générer de fichier ui-components.
Marius

@Marius, il est lié à mon autre question , je dois ajouter une colonne personnalisée dans la grille de commande de manière dynamique
Idham Choudry

Réponses:


1

Pour l'instant, j'utilise la fonction originale de php pour écrire / créer un fichier dans mon répertoire d'extension comme ceci:

    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;
     }

s'il existe un moyen plus approprié de le faire dans Magento 2, faites-le moi savoir et j'accepterai la réponse à cette question, mais pour l'instant si quelqu'un veut l'utiliser comme solution, cela fonctionne correctement pour moi mais je ne le recommande pas


C'est une très mauvaise pratique - l'utilisation de fonctions PHP natives élimine l'avantage d'utiliser le framework intégré de Magento. Je suggérerais de jeter un coup d'œil aux modules de base, en particulier ceux d'import / export.
2018

0

Si vous souhaitez essayer une autre façon, utilisez peut-être Magento \ Framework \ Filesystem \ Io \ File et Magento \ Framework \ Convert \ ConvertArray. ConvertArray est utile pour créer un fichier xml à partir d'un tableau multidimensionnel et File peut l'écrire pour vous (et vérifier les autorisations, créer des répertoires, etc.). Voici un exemple de 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);
}

si mon tableau est:

$myArray = array(
  'fruit' => 'apple',
  'vegetables' => array('vegetable_1' => 'carrot', 'vegetable_2' => 'tomato'),
  'meat' => 'none',
  'sweets' => 'chocolate');

et j'appelle ma fonction:

$simpleXmlContents =  $this->convertArray->assocToXml($myArray, 'diner');
$this->file->write($myXmlFile,$simpleXmlContents->asXML());

J'obtiendrais ce qui suit dans monfichier.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>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.