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_listingdoit utiliser une Magento\Cms\Model\ResourceModel\Page\Grid\Collectioncollection.
<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 PageGridDataProviderdans la cms_page_listingconfiguration.
<!-- 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 PageGridDataProviderré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 dataProviderjeu 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