요약
현재의 높은 수준의 이해는 (Magento 2.2) UI 구성 요소의 노드에서 해당 노드로 XML 데이터 definition.map.xml
를 매핑 하는 것입니다 .<settings>
<argument>
편집 :이 답변을 작성한 후 Magento 설명서에 의미 변경 사항에 대한 추가 정보가 있음을 알았 습니다 .
설명
문맥 상, 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 설명서에는 이러한 변경의 동기를 설명하는 페이지가 있습니다. 봐 여기에 자세한 내용은.