Magento 2 ma nową uiComponent
funkcję „ ”. Umożliwia to dołączenie prostego <uiComponent/>
znacznika do plików XML obsługi układu, aby dodać takie rzeczy, jak siatki i formularze do strony aplikacji.
To wydaje się , że konfiguracja dla siatki danych (A listing
) wymaga dwóch obiektów kolekcja być skonfigurowany.
Jaka jest rola każdej kolekcji konfiguracji poniżej? Czy też źle rozumiem role tych kolekcji? Czy istnieje sposób na utworzenie obiektu siatki za pomocą tylko jednej kolekcji?
Poniższa konfiguracja konfiguruje komponent interfejsu użytkownika o nazwie cms_page_listing
vendor/magento/module-cms/view/adminhtml/ui_component/cms_page_listing.xml
I następujący wtrysk DI mówi Magento, że cms_page_listing
należy użyć Magento\Cms\Model\ResourceModel\Page\Grid\Collection
kolekcji.
<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>
Wydaje się, że jest to główna kolekcja używana do zapełniania siatki.
Jednak jest to również PageGridDataProvider
w cms_page_listing
konfiguracji.
<!-- 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>
W PageGridDataProvider
postanawia o 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>
Ten typ wirtualny konfiguruje drugą kolekcję ( Magento\Cms\Model\ResourceModel\Page\Collection
).
Nie jest jasne, dlaczego ta druga konfiguracja jest potrzebna ani jaka jest jej rola w tworzeniu siatki. Pytanie wyższego poziomu brzmi prawdopodobnie, jaką rolę dataProvider
odgrywa tworzenie siatki interfejsu użytkownika . Większe, większe pytanie dotyczy prawdopodobnie tego, jakie obiekty PHP są tworzone w celu utworzenia siatki listingu interfejsu użytkownika i jak kontroluje je konfiguracja