Magento 2.2: Tệp định nghĩa.map.xml là gì?


11

Magento 2.2 đã giới thiệu một tệp mới, định nghĩa.map.xml .
Mục đích và mục đích của tập tin này là gì? Nó dường như có liên quan đến việc xây dựng thuộc tính lược đồ Magento\Ui\Config\Converter, nhưng không có ghi chú GitHub nào thực sự giải thích mục đích của các tệp này hoặc nội dung của nó có ý nghĩa gì để truyền đạt.

Khác với sự tò mò chung, mối quan tâm chính của tôi là vá một mô-đun hướng dẫn bị hỏng trong M2.2 .

Câu trả lời:


4

Tóm lược

Sự hiểu biết cấp cao hiện tại của tôi là mục đích của definition.map.xmlviệc ánh xạ dữ liệu XML từ <settings>nút Thành phần UI (Magento 2.2) sang các <argument>nút của nó .

Chỉnh sửa : Sau khi viết câu trả lời này, tôi thấy rằng tài liệu Magento có thêm thông tin về các thay đổi ngữ nghĩa ở đây .

Giải trình

Đối với ngữ cảnh, các thành phần UI đã sử dụng <argument>các nút trong một thời gian dài hơn <settings>. Cụ thể, trong view/[area]/ui_component/etc/definition.xmltệp hoặc tệp view/[area]/ui_component/[ui_component_name].xmlcấu hình, thực tiễn tiêu chuẩn là bao gồm một nút XML, chẳng hạn như sau:

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

Cấu hình đó, nếu được trao cho, <form>Thành phần UI, sẽ được truyền vào hàm Formtạo của lớp PHP ( Magento/Ui/Component/Form.php) trong $datamảng. Bản dịch khá đơn giản.

Tuy nhiên, cấu trúc này không cung cấp kiểm soát sắc thái hoặc xác thực XML xác định. Các nhà phát triển có thể đặt bất cứ thứ gì họ muốn vào các <argument>nút của họ mà không bị trừng phạt (ít nhất là ở mức xác thực XSD) và các giá trị đó được chuyển ngay về mã PHP mà không cần nhiều biến đổi.

Để thêm một mức độ trừu tượng và xác nhận, Magento đã giới thiệu <settings>nút. Nhìn lại một nút trong 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>

... Một cấu trúc trông rất giống với <argument>cây cổ thụ bắt đầu xuất hiện. Ví dụ, sự khác biệt duy nhất là khi người ta muốn thêm một công cụ quay vòng vào một biểu mẫu, thay vì sử dụng <argument>kiểu:

<argument name="data" xsi:type="array">
    <item name="spinner" xsi:type="string">[My_Spinner_Name]</item>
</argument>

... người ta có thể nhận thấy rằng giá trị cấu hình tương tự được ánh xạ bởi dòng <item name="spinner" type="string" xsi:type="xpath">settings/spinner</item>theo cú pháp thay thế sau:

<settings>
    <spinner>[My_Spinner_Name]</spinner>
</settings>

Nhìn bề ngoài, đây có vẻ như là một mức độ trừu tượng hoàn toàn mệt mỏi, lưu một vài ký tự XML trong một tệp cấu hình bằng cách thêm nhiều dòng vào một tệp ánh xạ mới.

Tuy nhiên, không phải mọi ánh xạ đều là vấn đề đơn giản của sao chép và dán. Ví dụ, có vẻ như ánh xạ cho cấu hình nút:

<item name="buttons" type="buttons" xsi:type="converter">settings/buttons</item>

... là của xsi:type="converter"(chứ không phải xpath, giống như ví dụ về spinner ở trên). Việc xác định hậu quả của một tuyên bố như vậy là vượt quá khả năng của tôi, nhưng trình thám hiểm mã nguồn thông minh có thể muốn xem xét Magento\Ui\Config\Converter, trong đó nhiều nút cấu hình XML phức tạp hơn này có các lớp PHP có tên trùng khớp.

Hiệu ứng trên XML rõ ràng hơn. Trong khi đó cú pháp cũ cho các định nghĩa nút sẽ là

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

... cấu hình mới sẽ trông như sau:

<settings>
    <buttons>
        <button name="back" class="Company\Basic\Block\Adminhtml\Slides\BackButton"/>
        <button name="save" class="Company\Basic\Block\Adminhtml\Slides\SaveButton"/>
    </buttons>
</settings>

... Và rõ ràng có những lợi ích bổ sung khi chuyển qua Ui/Configmã chuyển đổi PHP của Magento .

Đây chỉ là một quan điểm khó hiểu về những gì người ngoài nhận thấy là mục đích đằng sau các tệp này: Tôi chắc chắn rằng một nhà phát triển Magento thực tế sẽ có thể cung cấp cái nhìn sâu sắc hơn nhiều về cả các chi tiết chức năng của mã và động lực đằng sau mức bổ sung này trừu tượng hóa.

Chỉnh sửa : Trên thực tế, có vẻ như tài liệu Magento có một trang mô tả động lực đằng sau những thay đổi này. Nhìn vào đây để biết thêm thông tin.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.