По поводу source
узла
Значение source
узла соответствует ключу в массиве данных, возвращаемому \Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderInterface::getData
методом вашего компонента пользовательского интерфейса.
Например, давайте рассмотрим пользовательский интерфейс customer_form .
файл/Magento/Customer/view/base/ui_component/customer_form.xml
Отсюда видно, что для большинства полей Magento использует customer
значение под source
узлом.
Но подождите, для полей под address
fieldset это значение изменилось на 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
узел изменяет путь к полученному значению для поля. Это достигается с помощью техники связывания .