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