Nos arquivos de configuração do UI Form Component do Magento 2, você verá um item
atributo com o mesmo source
- <item name="source" xsi:type="string">block</item>
abaixo.
#File: vendor/magento/module-cms/view/adminhtml/ui_component/cms_block_form.xml
<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">Block Title</item>
<item name="formElement" xsi:type="string">input</item>
<item name="source" xsi:type="string">block</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>
Para que servem esses campos? Eu pergunto porque parece que eles não são necessários. Por exemplo, o módulo neste repositório GitHub configura um formulário de componente de interface do usuário em funcionamento , mas não usa esses name="source"
itens.
Alguém sabe para que name="source"
servem esses itens? Estou ciente da mecânica do componente de interface do usuário que pega o XML e o cofigura como x-magento-init
JSON
"block_id": {
"type": "form.input",
"name": "block_id",
"dataScope": "block_id",
"config": {
"component": "Magento_Ui\/js\/form\/element\/abstract",
"template": "ui\/form\/field",
"visible": false,
"dataType": "text",
"formElement": "input",
"source": "block"
}
},
Que é alimentado em um uiElement
objeto de modelo de exibição Knockout baseado. No entanto, não está claro como a árvore aninhada dos uiElement
objetos de modelo de exibição Knockout baseados usa esses campos no nível do source
campo.
Se eu olhar para o uiElement
's initModules
método
initModules: function () {
_.each(this.modules, function (name, property) {
if (name) {
this[property] = this.requestModule(name);
}
}, this);
if (!_.isFunction(this.source)) {
this.source = registry.get(this.provider);
}
return this;
},
Vejo que o objeto faz referência a uma source
propriedade e, se não estiver definido, alcançará o registro de um objeto usando a provider
propriedade como um identificador de cadeia / chave. Ele parece ser o valor desses source
itens não é usado. No entanto, é possível que eles sejam usados pelo código PHP ou algum outro código javascript. Portanto, minha pergunta.
fonte
source
fazendo nesses arquivos XML :)Fui para "a fonte" (gemido) deste e parece que esses
<item name="source"/>
nós são, de fato, redundantes. Ou, o engenheiro Magento atualmente no comando deles se acha redundante, então isso é o mais próximo da verdade que chegaremos.fonte
A fonte é a chave com a qual o componente da interface do usuário pode ler os dados fornecidos pela classe " DataProvider ". É muito útil quando existem várias guias e conjuntos de campos.
Por exemplo: consulte
module-customer/view/base/ui_component/customer_form.xml
O
getData()
método na classe DataProvider retornará uma matriz com as chaves 'customer' e 'address' e os campos correspondentes nos conjuntos de campos serão mapeados a partir dele. A captura de tela exibe o resultado dogetData()
método.Depois, quando o
getDataSourceData()
método em Magento \ Ui \ Component \ Form é chamado, ele processa os dados acima.fonte
<item name="source
nó. No entanto, não vejo nenhum código PHP que faça referência aos dados no nó de origem. Além disso, o formulário Página do CMS possui um<item name="source" xsi:type="string">page</item>
nó e seus dados da fonte de dados não possuem umapage
chave. Finalmente, minha pesquisa indicaname="dataScope"
que determina onde um campo obtém seus valores.