özet
Benim şu anki üst düzey bir anlayış amacı olmasıdır definition.map.xml
etmektir 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.xml
dosya veya view/[area]/ui_component/[ui_component_name].xml
yapı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 Form
PHP 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"
( xpath
yukarı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/Config
PHP 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 .