Magento 2.2: ไฟล์ definition.map.xml คืออะไร


11

วีโอไอพี 2.2 แนะนำไฟล์ใหม่definition.map.xml
จุดประสงค์และความตั้งใจของไฟล์นี้คืออะไร? ดูเหมือนว่าจะเกี่ยวข้องกับการสร้างคุณสมบัติ schemaMap Magento\Ui\Config\Converterแต่ไม่มีโน้ต GitHub ใด ๆ ที่อธิบายถึงเจตนาของไฟล์นี้หรือเนื้อหาที่สื่อความหมาย

อื่น ๆ กว่าที่อยากรู้อยากเห็นโดยทั่วไปความสนใจหลักของฉันอยู่ในการซ่อมขึ้นโมดูลการกวดวิชาที่เสียใน M2.2

คำตอบ:


4

สรุป

ความเข้าใจในระดับสูงในปัจจุบันของฉันdefinition.map.xmlคือการทำแผนที่ข้อมูล XML จาก<settings>โหนดUI (Magento 2.2) ของ UI ไปยัง<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>องค์ประกอบ UI จะไขลานผ่านเข้าไปในคอนFormสตรัคเตอร์ของคลาส PHP ( Magento/Ui/Component/Form.php) ใน$dataอาเรย์ การแปลค่อนข้างตรงไปตรงมา

อย่างไรก็ตามโครงสร้างนี้ไม่ได้จัดเตรียมการควบคุมหรือการตรวจสอบความถูกต้องของ XML ที่เหมาะสมยิ่งขึ้น นักพัฒนาสามารถใส่สิ่งที่พวกเขาต้องการใน<argument>โหนดของพวกเขาด้วยการยกเว้นโทษ (อย่างน้อยในระดับการตรวจสอบ XSD) และค่าเหล่านั้นถูกส่งผ่านกลับไปยังโค้ด 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 ที่แท้จริงจะสามารถให้ข้อมูลเชิงลึกมากขึ้นเกี่ยวกับทั้งรายละเอียดการทำงานของรหัสและแรงจูงใจเบื้องหลังระดับเพิ่มเติมนี้ ของสิ่งที่เป็นนามธรรม

แก้ไข : ดูเหมือนว่าเอกสารวีโอไอพีจะมีหน้าอธิบายแรงจูงใจเบื้องหลังการเปลี่ยนแปลงเหล่านี้ ดูที่นี่สำหรับข้อมูลเพิ่มเติม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.