마 젠토 2.2 : definition.map.xml 파일이란 무엇입니까?


11

Magento 2.2는 새로운 파일 인 definition.map.xml을 도입했습니다 .
이 파일의 목적과 의도는 무엇입니까? 에 schemaMap 속성을 작성하는 것과 관련이있는 것 같지만 Magento\Ui\Config\ConverterGitHub 메모 중 어느 것도이 파일의 의도 또는 그 내용이 전달하려는 내용을 실제로 설명하지 않습니다.

일반적인 호기심 외에, 나의 주요 관심사는 M2.2에서 깨어진 튜토리얼 모듈을 패치하는 것 입니다.

답변:


4

요약

현재의 높은 수준의 이해는 (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/ConfigPHP 변환 코드 를 통과하면 추가적인 이점이 있습니다.

이것은 외부인이 이러한 파일의 의도로 인식하는 것에 대한 객관적인 견해입니다. 실제 Magento 개발자는 코드의 기능적 세부 사항 과이 추가 수준의 동기에 대해 훨씬 더 많은 통찰력을 제공 할 수 있다고 확신합니다 추상화

편집 : 실제로 Magento 설명서에는 이러한 변경의 동기를 설명하는 페이지가 있습니다. 봐 여기에 자세한 내용은.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.