Magento 2 tiene una nueva " uiComponent
" característica. Esto le permite incluir una <uiComponent/>
etiqueta simple en su diseño para manejar archivos XML para agregar elementos como Cuadrículas y formularios a su página de aplicación.
Se parece que la configuración para una cuadrícula de datos (a listing
) requiere dos configurarse objetos de colección.
¿Cuál es el papel de cada colección de configuración a continuación? ¿O no entiendo los roles de estas colecciones? ¿O hay una manera de crear un objeto de cuadrícula usando solo una colección?
La siguiente configuración configura un componente de listado de UI denominado cms_page_listing
vendor/magento/module-cms/view/adminhtml/ui_component/cms_page_listing.xml
Y la siguiente inyección DI le dice a Magento que cms_page_listing
debería usar una Magento\Cms\Model\ResourceModel\Page\Grid\Collection
colección.
<type name="Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory">
<arguments>
<argument name="collections" xsi:type="array">
<item name="cms_page_listing_data_source" xsi:type="string">Magento\Cms\Model\ResourceModel\Page\Grid\Collection</item>
</argument>
</arguments>
</type>
Esta parece ser la colección principal utilizada para poblar la cuadrícula.
Sin embargo , también hay presente PageGridDataProvider
en la cms_page_listing
configuración.
<!-- File: vendor/magento/module-cms/view/adminhtml/ui_component/cms_page_listing.xml -->
<argument name="dataProvider" xsi:type="configurableObject">
<argument name="class" xsi:type="string">PageGridDataProvider</argument>
<argument name="name" xsi:type="string">cms_page_listing_data_source</argument>
<argument name="primaryFieldName" xsi:type="string">page_id</argument>
<argument name="requestFieldName" xsi:type="string">id</argument>
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="update_url" xsi:type="url" path="mui/index/render"/>
</item>
</argument>
</argument>
El PageGridDataProvider
resuelve a un virtualType
<virtualType name="PageGridDataProvider" type="Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider">
<arguments>
<argument name="collection" xsi:type="object" shared="false">Magento\Cms\Model\ResourceModel\Page\Collection</argument>
<argument name="filterPool" xsi:type="object" shared="false">CmsGirdFilterPool</argument>
</arguments>
</virtualType>
Este tipo virtual configura una segunda colección ( Magento\Cms\Model\ResourceModel\Page\Collection
).
No está claro por qué se necesita esta segunda configuración, o cuál es su papel en la creación de una cuadrícula. La pregunta de nivel superior es probablemente qué papel dataProvider
desempeña el papel en la creación de una cuadrícula de interfaz de usuario . La pregunta más grande es probablemente ¿Qué objetos PHP se crean para crear una cuadrícula de listado de UI y cómo los controla una configuración