Magento 2.2: definition.map.xml dosyası nedir?


11

Magento 2.2, definition.map.xml adlı yeni bir dosya tanıttı .
Bu dosyanın amacı ve amacı nedir? ŞemaMap özelliğini oluşturmakla ilgili gibi görünüyor Magento\Ui\Config\Converter, ancak GitHub notlarının hiçbiri bu dosyaların amacını veya içeriğinin ne aktarması gerektiğini gerçekten açıklamıyor.

Genel meraktan başka, asıl ilgim M2.2'de kırılmış bir eğitim modülünü yamalamak .

Yanıtlar:


4

özet

Benim şu anki üst düzey bir anlayış amacı olmasıdır definition.map.xmletmektir map bir (Magento 2.2) UI Component'ın XML verilerini <settings>onun için düğüm <argument>düğümler.

Düzenleme : Bu yanıtı yazdıktan sonra, Magento dokümantasyon semantik değişiklikler ek bilgiler vardır bulundu burada .

açıklama

Bağlam için, UI bileşenleri <argument>düğümleri daha uzun süredir kullanıyor <settings>. Özellikle, view/[area]/ui_component/etc/definition.xmldosya veya view/[area]/ui_component/[ui_component_name].xmlyapılandırma dosyalarında, standart uygulama aşağıdaki gibi bir XML düğümü içermektir:

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

Bu yapılandırma, örneğin, bir <form>UI Bileşenine verilirse dizideki FormPHP sınıfının yapıcısına ( Magento/Ui/Component/Form.php) aktarılır $data. Çeviri oldukça basittir.

Bununla birlikte, bu yapı, tanımlayıcı XML'nin nüanslı kontrolünü veya validasyonunu sağlamadı. Geliştiriciler, <argument>düğümlerine istedikleri her şeyi cezasız bir şekilde (en azından XSD doğrulama seviyesinde) koyabilirler ve bu değerler çok fazla dönüşüm olmadan PHP koduna geri aktarılır.

Bir soyutlama ve doğrulama düzeyi eklemek için Magento <settings>düğümü tanıttı . Bir düğüme başka bir bakış atmak 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>

... Eski <argument>ağaca çok benzeyen bir yapı ortaya çıkmaya başlar. Tek fark, örneğin, <argument>stili kullanmak yerine forma bir değer değiştirici eklemek istediğinde :

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

... aynı yapılandırma değerinin çizgi tarafından <item name="spinner" type="string" xsi:type="xpath">settings/spinner</item>aşağıdaki alternatif sözdizimiyle eşlendiğini fark edebiliriz :

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

Yüzeyde, bu tamamen yorucu bir soyutlama seviyesine benziyor ve yeni bir eşleme dosyasına birden fazla satır ekleyerek bir XML dosyasına birkaç karakter kaydediyor.

Ancak, her eşleme basit bir kopyala-yapıştır meselesi değildir. Örneğin, düğme yapılandırması için eşleme olduğu görülmektedir:

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

... xsi:type="converter"( xpathyukarıdaki spinner örneği gibi) değil. Böyle bir bildirimin sonuçlarını belirlemek yeteneğimin ötesinde, ancak cesur kaynak kodu gezgini Magento\Ui\Config\Converter, bu daha karmaşık XML yapılandırma düğümlerinin çoğunun eşleşen adlara sahip PHP sınıflarına sahip olmasını isteyebilir .

XML üzerindeki etkisi daha belirgindir. Oysa düğme tanımları için eski sözdizimi

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

... yeni yapılandırma şöyle görünecektir:

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

... ve görünüşe göre Magento'nun Ui/ConfigPHP dönüşüm kodundan geçmenin ek avantajlarına sahip .

Bu sadece bir yabancının bu dosyaların arkasındaki niyet olarak algıladıkları şeylerin lanetli bir görünümüdür: Gerçek bir Magento geliştiricisinin hem kodun işlevsel detayları hem de bu ek seviyenin arkasındaki motivasyon hakkında çok daha fazla bilgi sağlayabileceğinden eminim. soyutlama.

Düzenleme : Görünüşe göre Magento belgelerinde aslında bu değişikliklerin ardındaki motivasyonu açıklayan bir sayfa var. Daha fazla bilgi için buraya bakın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.