プログラムでXMLファイルを生成する


8

.xml拡張機能からファイルを生成する必要があります。Namespace/Module/view/adminhtml/ui_component/フォルダ内

.xmlデータ収集に基づいてファイルが生成されるため、これをプログラムで行う必要があります。これを行う方法はありますか?


その場でレイアウトファイルを生成することは決して良い考えではありません。それはあなたのバージョン管理を台無しにします。あなたが取ったアプローチの代わりにあなたが解決しようとしている問題を説明してください。多分、ui-componentsファイルを生成せずにそれを解決する別の方法があるでしょう。
マリウス

@Mariusそれは基本的に他の質問に関連していました。注文グリッドにカスタム列を動的に追加する必要があります
Idham Choudry

回答:


1

今のところ、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でより適切な方法がある場合はお知らせください。この質問の回答を受け入れますが、今のところ、これを解決策として使用したい場合は、適切に機能していますが、お勧めしません


これは本当に悪い習慣です。ネイティブPHP関数を使用すると、Magentoの組み込みフレームワークを使用する利点がなくなります。コアモジュール、特にインポート/エクスポートモジュールを確認することをお勧めします。
Bery

0

別の方法を試したい場合は、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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.