Magento 2 ha una nuova uiComponent
funzione " ". Ciò consente di includere un semplice <uiComponent/>
tag nel layout gestire i file XML per aggiungere elementi come griglie e moduli alla pagina dell'applicazione.
Essa appare che la configurazione di una griglia di dati (a listing
) richiede due oggetti da collezione configurare.
Qual è il ruolo di ciascuna raccolta di configurazione di seguito? O fraintendo i ruoli di queste collezioni? O c'è un modo per creare un oggetto grid usando solo una singola collezione?
La seguente configurazione imposta un componente elenco UI denominato cms_page_listing
vendor/magento/module-cms/view/adminhtml/ui_component/cms_page_listing.xml
E la seguente DI Injection dice a Magento che a cms_page_listing
dovrebbe usare una Magento\Cms\Model\ResourceModel\Page\Grid\Collection
collezione.
<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>
Questa sembra essere la raccolta principale utilizzata per popolare la griglia.
Tuttavia , c'è anche questo PageGridDataProvider
nella cms_page_listing
configurazione.
<!-- 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>
Si PageGridDataProvider
risolve in un tipo virtuale
<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>
Questo tipo virtuale configura una seconda raccolta ( Magento\Cms\Model\ResourceModel\Page\Collection
).
Non è chiaro perché sia necessaria questa seconda configurazione o quale sia il suo ruolo nella creazione di una griglia. La domanda di livello superiore è probabilmente quale ruolo dataProvider
gioca nella creazione di una griglia dell'interfaccia utente . La domanda più ampia è probabilmente quali oggetti PHP vengono creati per creare una griglia di quotazione dell'interfaccia utente e come viene controllata da una configurazione