Что означают «источник» и «dataScope» в административной форме файла конфигурации компонента пользовательского интерфейса

11

В конфигурации компонента пользовательского интерфейса формы администрирования Magento2 есть узлы источника и dataScope . Что они имеют в виду и как они должны использоваться?

<field name="title">
    <argument name="data" xsi:type="array">
        <item name="config" xsi:type="array">
            <item name="dataType" xsi:type="string">text</item>
            <item name="label" xsi:type="string" translate="true">Page Title</item>
            <item name="formElement" xsi:type="string">input</item>
            <item name="source" xsi:type="string">page</item>
            <item name="sortOrder" xsi:type="number">20</item>
            <item name="dataScope" xsi:type="string">title</item>
            <item name="validation" xsi:type="array">
                <item name="required-entry" xsi:type="boolean">true</item>
            </item>
        </item>
    </argument>
</field>
Нерон
источник

Ответы:

20

По поводу sourceузла

Значение sourceузла соответствует ключу в массиве данных, возвращаемому \Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderInterface::getDataметодом вашего компонента пользовательского интерфейса.


Например, давайте рассмотрим пользовательский интерфейс customer_form .
файл/Magento/Customer/view/base/ui_component/customer_form.xml

Отсюда видно, что для большинства полей Magento использует customerзначение под sourceузлом.
Но подождите, для полей под addressfieldset это значение изменилось на address.

Теперь давайте кратко рассмотрим соответствующий DataProvider для компонента пользовательского интерфейса customer_form .
Класс есть \Magento\Customer\Model\Customer\DataProvider.

Грубо говоря, метод getDataэтого класса отвечает за возврат данных, которые заполняются в соответствующие поля, объявленные компонентом customer_form .
Как вы теперь можете догадаться, значение customersource узла указывает нам использовать значение, сохраненное в ключе customer в getDataметоде, в то время как адрес source указывает на данные, сохраненные под адресом ключа в возвращаемых данных.

Пристальный взгляд: <field name="firstname" formElement="input"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> item name="source" xsi:type="string">customer</item> </item> </argument> </field>

Поле выше берет свое имя из данных, хранящихся в ключе customer, возвращенном DataProvider клиента .

Хотя в приведенном ниже случае источником значения имени является данные, хранящиеся под ключевым адресом : <field name="firstname" formElement="input"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="source" xsi:type="string">address</item> </item> </argument> </field>


По поводу dataScopeузла

dataScopeУзел позволяет изменять значение для имени атрибута вашего ввода (поля), например, <field name="title"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="dataType" xsi:type="string">text</item> <item name="formElement" xsi:type="string">input</item <item name="dataScope" xsi:type="string">field_name</item> </item> </argument> </field> входной результат будет оказана следующим образом :<input name="field_name"...>

Вы также можете записать значения в dataScopeузел , разделенные точками: customer.address.firstnameв этом случае входной результат оказывается следующим: <input name="customer[address][firstname]"...> Вот где магия происходит .

Также dataScopeузел изменяет путь к полученному значению для поля. Это достигается с помощью техники связывания .

Алексей Варламов
источник
1

это означает, что ваше поле будет отправлено в POST, как ваше значение «dataScope», в вашей ситуации, например, после запроса будет ['title'] => var

Слава Юртёв
источник
Вы пропустили один вопрос. В чем смысл источника ? Если это источник данных, почему аргумент это страница , а не page_listing_data_source ?
Ключ Шан