En los archivos de configuración de componentes de formulario de IU de Magento 2, a menudo verá un item atributo con el mismo de source- <item name="source" xsi:type="string">block</item>a continuación.
#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 qué son estos campos? Pregunto porque parece que no son necesarios. Por ejemplo, el módulo en este repositorio de GitHub configura un formulario de componente de interfaz de usuario que funciona , pero no usa estos name="source"elementos.
¿Alguien sabe lo que estos name="source" sirven artículos? Soy consciente de la mecánica del componente UI que toma el XML y lo configura como x-magento-initJSON
"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 se alimenta a un uiElementobjeto de modelo de vista Knockout basado. Sin embargo, no está claro cómo el árbol anidado de los uiElementobjetos del modelo de vista Knockout basado utiliza estos campos de nivel de sourcecampo.
Si miro el uiElement 's initModulesmé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;
},
Veo que el objeto hace referencia a una sourcepropiedad, y si no está configurado, alcanzará el registro de un objeto usando la providerpropiedad como un identificador de cadena / clave. Se parece que el valor de estos sourceno se utiliza artículos. Sin embargo, es posible que los use el código PHP o algún otro código javascript. Por lo tanto, mi pregunta.
fuente

sourcehaciendo en esos archivos XML :)Fui a "la fuente" (gemido) para este y parece que estos
<item name="source"/>nodos son, de hecho, redundantes. O, el ingeniero de Magento actualmente a cargo de ellos piensa que son redundantes, así que eso es lo más cercano a la verdad que obtendremos.fuente
La fuente es la clave que utiliza el componente ui para leer los datos proporcionados por " DataProvider clase ". Es muy útil cuando hay múltiples pestañas y conjuntos de campos.
Por ejemplo: referir
module-customer/view/base/ui_component/customer_form.xmlEl
getData()método en la clase DataProvider devolverá una matriz con las claves 'cliente' y 'dirección' y los campos correspondientes en los conjuntos de campos se asignarán a partir de ella. La captura de pantalla muestra el resultado delgetData()método.Luego, cuando
getDataSourceData()se llama al método en Magento \ Ui \ Component \ Form, procesa los datos anteriores.fuente
<item name="sourcenodo. Sin embargo, no veo ningún código PHP que haga referencia a los datos en el nodo de origen. Además, el formulario de página CMS tiene un<item name="source" xsi:type="string">page</item>nodo y su fuente de datos no tiene unapageclave. Finalmente, mi investigación indicaname="dataScope"que determina dónde obtiene sus valores un campo.