Magento 2 a une nouvelle fonctionnalité " uiComponent
". Cela vous permet d'inclure une simple <uiComponent/>
balise dans vos fichiers XML de gestion de mise en page pour ajouter des éléments tels que des grilles et des formulaires à votre page d'application.
Il semble que la configuration d'une grille de données (a listing
) nécessite la configuration de deux objets de collecte.
Quel est le rôle de chaque collection de configurations ci-dessous? Ou est-ce que je comprends mal les rôles de ces collections? Ou existe-t-il un moyen de créer un objet de grille en utilisant une seule collection?
La configuration suivante configure un composant de liste d'interface utilisateur nommé cms_page_listing
vendor/magento/module-cms/view/adminhtml/ui_component/cms_page_listing.xml
Et l'injection DI suivante indique à Magento que cms_page_listing
doit utiliser une Magento\Cms\Model\ResourceModel\Page\Grid\Collection
collection.
<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>
Cela semble être la principale collection utilisée pour remplir la grille.
Cependant , il y a aussi cela PageGridDataProvider
dans la cms_page_listing
configuration.
<!-- 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>
Le PageGridDataProvider
résout en 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>
Ce type virtuel configure une deuxième collection ( Magento\Cms\Model\ResourceModel\Page\Collection
).
On ne sait pas pourquoi cette deuxième configuration est nécessaire, ni quel est son rôle dans la création d'une grille. La question de niveau supérieur est probablement quel rôle joue le dataProvider
jeu dans la création d'une grille d'interface utilisateur . La plus grande question plus large est probablement quels objets PHP sont créés pour créer une grille de liste d'interface utilisateur, et comment une configuration les contrôle-t-elle