Hasilkan file xml secara terprogram

8

Saya perlu membuat .xmlfile dari ekstensi saya. Namespace/Module/view/adminhtml/ui_component/Folder di dalam ,

Saya perlu melakukan ini secara pro gramatikal karena .xmlfile akan dihasilkan berdasarkan pengumpulan data, apakah ada cara untuk melakukan ini?

Idham Choudry
sumber
tidak pernah merupakan ide yang baik untuk menghasilkan file tata letak dengan cepat. Ini mengacaukan versi Anda. Jelaskan masalah yang Anda coba selesaikan alih-alih pendekatan yang telah Anda ambil. Mungkin ada cara berbeda untuk menyelesaikannya tanpa menghasilkan file ui-komponen.
Marius
@Marius itu terkait dengan pertanyaan saya yang lain pada dasarnya, saya perlu menambahkan kolom khusus dalam kisi pesanan penjualan secara dinamis
Idham Choudry

Jawaban:

1

Untuk saat ini saya menggunakan fungsi asli php untuk menulis / membuat file di dalam direktori ekstensi saya seperti ini:

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

jika ada cara yang lebih tepat untuk melakukannya di Magento 2 tolong beri tahu saya, dan saya akan menerima jawaban untuk pertanyaan ini, tetapi untuk saat ini jika ada yang ingin menggunakan ini sebagai solusi, itu berfungsi dengan baik untuk saya tetapi saya tidak merekomendasikannya

Idham Choudry
sumber
Itu adalah praktik yang sangat buruk - menggunakan fungsi PHP asli menghilangkan keuntungan menggunakan kerangka kerja Magento bawaan. Saya akan menyarankan untuk melihat modul inti, terutama yang impor / ekspor.
Bery
0

Jika Anda ingin mencoba cara lain, mungkin gunakan Magento \ Framework \ Filesystem \ Io \ File dan Magento \ Framework \ Convert \ ConvertArray. ConvertArray berguna untuk membuat file xml dari array multidimensi dan File dapat menuliskannya untuk Anda (dan memeriksa izin, membuat direktori, dan lainnya). Ini adalah contoh dasarnya:

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

jika array saya adalah:

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

dan saya memanggil fungsi saya:

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

Saya akan mendapatkan yang berikut di 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>
Isolde
sumber