Em relação ao source
nó
O source
valor do nó corresponde a uma chave na matriz de dados retornada pelo \Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderInterface::getData
método do seu componente de interface do usuário.
Por exemplo, vamos considerar a interface do usuário customer_form .
Arquivo/Magento/Customer/view/base/ui_component/customer_form.xml
A partir daqui, você pode ver que, na maioria dos campos, o Magento usa o customer
valor sob o source
nó.
Mas espere, para os campos no address
fieldset esse valor foi alterado para address
.
Agora, vamos dar uma breve olhada no DataProvider correspondente para o componente de interface do usuário customer_form .
A turma é \Magento\Customer\Model\Customer\DataProvider
.
Grosso modo, o método getData
dessa classe é responsável pelo retorno de dados preenchidos para os campos correspondentes declarados pelo componente customer_form .
Como você pode adivinhar agora, o valor do cliente do source
nó nos diz para usar o valor armazenado no cliente principal no getData
método, enquanto o endereço source
aponta para os dados armazenados no endereço principal nos dados retornados.
Olhar mais atento:
<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>
O campo acima obtém seu valor de primeiro nome dos dados armazenados no cliente principal retornado pelo DataProvider do cliente .
Enquanto no caso abaixo, a fonte do valor do primeiro nome são os dados armazenados no endereço da chave :
<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>
Em relação ao dataScope
nó
O dataScope
nó permite alterar um valor para o atributo name da sua entrada (campo), por exemplo,
<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>
A entrada do resultado será renderizada da seguinte forma:<input name="field_name"...>
Você também pode gravar os valores no dataScope
nó separados por pontos: customer.address.firstname
nesse caso, a entrada do resultado é renderizada da seguinte maneira: <input name="customer[address][firstname]"...>
Aqui é onde a mágica acontece .
Além disso, o dataScope
nó altera o caminho do valor recuperado para um campo. Isto é conseguido através da técnica de ligação .