सारांश
मेरी वर्तमान उच्च-स्तरीय समझ यह है कि इसका उद्देश्य XML डेटा को (Magento 2.2) UI घटक के नोड से उसके नोड्स definition.map.xml
पर मैप<settings>
करना है <argument>
।
संपादित करें : इस उत्तर को लिखने के बाद, मैंने पाया कि मैगेंटो प्रलेखन में यहां अर्थ परिवर्तन पर अतिरिक्त जानकारी है ।
व्याख्या
संदर्भ के लिए, UI घटक <argument>
लंबे समय से नोड्स का उपयोग कर रहे हैं <settings>
। विशेष रूप से, view/[area]/ui_component/etc/definition.xml
फ़ाइल या view/[area]/ui_component/[ui_component_name].xml
कॉन्फ़िगरेशन फ़ाइलों में, मानक अभ्यास में निम्न के रूप में एक XML नोड शामिल करना था:
<argument name="data" xsi:type="array">
<item name="js_config" xsi:type="array">
<item name="provider" xsi:type="string">oracle_order_form.oracle_order_form_data_source</item>
</item>
<item name="label" xsi:type="string" translate="true">Company Information</item>
<item name="template" xsi:type="string">templates/form/collapsible</item>
</argument>
<form>
यूआई कंपोनेंट को अगर विन्यास दिया जाए, तो यह व्यूह में Form
PHP वर्ग के कंस्ट्रक्टर ( Magento/Ui/Component/Form.php
) में पास हो जाएगा $data
। अनुवाद काफी सीधा है।
हालांकि, इस संरचना ने परिभाषित एक्सएमएल की बारीक नियंत्रण या सत्यापन प्रदान नहीं किया। डेवलपर्स अपने <argument>
नोड्स में जो कुछ भी चाहते थे , उसे कम से कम (एक्सएसडी सत्यापन स्तर पर) कम से कम, और उन मूल्यों को बहुत सारे परिवर्तनों के बिना PHP कोड में वापस पारित किया जा सकता था।
अमूर्त और मान्यता के स्तर को जोड़ने के लिए, Magento ने <settings>
नोड पेश किया । नोड पर एक और नज़र डालना definition.map.xml
:
<component name="form" include="uiElementSettings">
<schema name="current">
<argument name="data" xsi:type="array">
<item name="layout" xsi:type="array">
<item name="type" type="string" xsi:type="xpath">settings/layout/type</item>
<item name="navContainerName" type="string" xsi:type="xpath">settings/layout/navContainerName</item>
</item>
<item name="config" xsi:type="array">
<item name="selectorPrefix" type="string" xsi:type="xpath">settings/selectorPrefix</item>
<item name="messagesClass" type="string" xsi:type="xpath">settings/messagesClass</item>
<item name="errorClass" type="string" xsi:type="xpath">settings/errorClass</item>
<item name="ajaxSaveType" type="string" xsi:type="xpath">settings/ajaxSaveType</item>
<item name="namespace" type="string" xsi:type="xpath">settings/namespace</item>
<item name="ajaxSave" type="boolean" xsi:type="xpath">settings/ajaxSave</item>
<item name="reloadItem" type="string" xsi:type="xpath">settings/reloadItem</item>
</item>
<item name="buttons" type="buttons" xsi:type="converter">settings/buttons</item>
<item name="spinner" type="string" xsi:type="xpath">settings/spinner</item>
</argument>
</schema>
</component>
... एक संरचना जो पुराने <argument>
पेड़ के समान दिखती है, दिखाई देने लगती है। एकमात्र अंतर यह है कि, उदाहरण के लिए, जब कोई <argument>
स्टाइल का उपयोग करने के बजाय स्पिनर को एक फॉर्म में जोड़ना चाहता है :
<argument name="data" xsi:type="array">
<item name="spinner" xsi:type="string">[My_Spinner_Name]</item>
</argument>
... कोई यह देख सकता है कि एक ही कॉन्फ़िगरेशन मान <item name="spinner" type="string" xsi:type="xpath">settings/spinner</item>
निम्न वैकल्पिक सिंटैक्स पर लाइन द्वारा मैप किया गया है :
<settings>
<spinner>[My_Spinner_Name]</spinner>
</settings>
सतह पर, यह एब्सट्रैक्ट के पूरी तरह से वसा स्तर की तरह लगता है, एक नई फ़ाइल मैपिंग फ़ाइल में कई लाइनें जोड़कर XML के कुछ वर्णों को एक कॉन्फ़िगरेशन फ़ाइल में सहेजता है।
हालांकि, हर मैपिंग कॉपी-एंड-पेस्ट का एक साधारण मामला नहीं है। उदाहरण के लिए, ऐसा लगता है कि बटन विन्यास के लिए मानचित्रण:
<item name="buttons" type="buttons" xsi:type="converter">settings/buttons</item>
... xsi:type="converter"
(के बजाय xpath
ऊपर स्पिनर उदाहरण की तरह है)। इस तरह की घोषणा के परिणामों को निर्धारित करना मेरी क्षमता से परे है, लेकिन निडर स्रोत कोड एक्सप्लोरर में देखना चाह सकता है Magento\Ui\Config\Converter
, जिसमें इन अधिक जटिल XML कॉन्फ़िगरेशन नोड्स में कई मिलान नाम के साथ PHP कक्षाएं हैं।
XML पर प्रभाव अधिक स्पष्ट है। जबकि बटन परिभाषाओं के लिए पुराना वाक्यविन्यास होगा
<argument name="data" xsi:type="array">
<item name="buttons" xsi:type="array">
<item name="back" xsi:type="string">Company\Basic\Block\Adminhtml\Slides\BackButton</item>
<item name="save" xsi:type="string">Company\Basic\Block\Adminhtml\Slides\SaveButton</item>
</item>
</argument>
... नया कॉन्फ़िगरेशन जैसा दिखेगा:
<settings>
<buttons>
<button name="back" class="Company\Basic\Block\Adminhtml\Slides\BackButton"/>
<button name="save" class="Company\Basic\Block\Adminhtml\Slides\SaveButton"/>
</buttons>
</settings>
... और ओजस्वी रूप से मैगेंटो के Ui/Config
PHP रूपांतरण कोड से गुजरने के अतिरिक्त लाभ हैं ।
यह केवल एक सरसरी दृष्टि है कि एक बाहरी व्यक्ति इन फ़ाइलों के पीछे की मंशा को क्या मानता है: मुझे यकीन है कि एक वास्तविक Magento डेवलपर कोड के कार्यात्मक विवरण और इस अतिरिक्त स्तर के पीछे प्रेरणा दोनों में बहुत अधिक जानकारी प्रदान करने में सक्षम होगा। अमूर्तता का।
संपादित करें : ऐसा लगता है कि Magento के दस्तावेज़ वास्तव में, इन परिवर्तनों के पीछे की प्रेरणा का वर्णन करने वाला एक पृष्ठ है। देखो यहाँ अधिक जानकारी के लिए।