Dans les fichiers de configuration du composant de formulaire UI de Magento 2, vous verrez souvent un item
attribut avec le même de source
- <item name="source" xsi:type="string">block</item>
ci - dessous.
#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>
À quoi servent ces champs? Je demande parce qu'il semble que ce ne soit pas nécessaire. Par exemple, le module de ce référentiel GitHub configure un formulaire de composant d'interface utilisateur fonctionnel , mais n'utilise pas ces name="source"
éléments.
Quelqu'un sait-il à quoi name="source"
servent ces articles? Je connais le mécanisme du composant UI qui prend le XML et le cofigure en 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"
}
},
Qui est introduit dans un uiElement
objet de modèle de vue Knockout basé. Cependant, il n'est pas clair comment l'arborescence imbriquée des uiElement
objets de modèle de vue Knockout basée utilise ces champs au niveau du source
champ.
Si je regarde le uiElement
de » initModules
méthode
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;
},
Je vois que l'objet fait référence à une source
propriété, et s'il n'est pas défini, atteindra dans le registre un objet utilisant la provider
propriété comme identifiant de chaîne / clé. Il semble que la valeur de ces source
éléments ne soit pas utilisée. Cependant, il est possible qu'ils soient utilisés par le code PHP ou un autre code javascript. D'où ma question.
la source
source
passe dans ces fichiers XML :)Je suis allé à "la source" (gémir) pour celui-ci et il semble que ces
<item name="source"/>
nœuds soient, en effet, redondants. Ou, l'ingénieur Magento actuellement en charge d'eux pense qu'ils sont redondants, donc c'est aussi proche de la vérité que nous le ferons.la source
La source est la clé à l'aide de laquelle le composant ui peut lire les données fournies par " DataProvider classe ". Il est très utile lorsqu'il existe plusieurs onglets et ensembles de champs.
Par exemple: se référer
module-customer/view/base/ui_component/customer_form.xml
La
getData()
méthode dans la classe DataProvider renverra un tableau avec les clés «client» et «adresse» et les champs correspondants dans les ensembles de champs en seront mappés. La capture d'écran affiche le résultat de lagetData()
méthode.Ensuite, lorsque la
getDataSourceData()
méthode dans Magento \ Ui \ Component \ Form est appelée, elle traite les données ci-dessus.la source
<item name="source
nœud. Cependant, je ne vois aucun code PHP faisant référence aux données dans le nœud source. En outre, le formulaire de page CMS possède un<item name="source" xsi:type="string">page</item>
nœud et ses données de source de données n'ont pas depage
clé. Enfin, ma recherche indique sonname="dataScope"
qui détermine où un champ obtient ses valeurs.