Magento 2 hat eine neue " uiComponent" Funktion. Auf diese Weise können Sie ein einfaches <uiComponent/>Tag in Ihre XML-Layout-Handle-Dateien einfügen, um Ihrer Anwendungsseite beispielsweise Raster und Formulare hinzuzufügen.
Es scheint, dass für die Konfiguration eines Datengrids (a listing) zwei Erfassungsobjekte konfiguriert werden müssen.
Welche Rolle spielen die einzelnen Konfigurationssammlungen unten? Oder verstehe ich die Rollen dieser Sammlungen falsch? Oder gibt es eine Möglichkeit, Rasterobjekte nur mit einer einzigen Sammlung zu erstellen?
Die folgende Konfiguration richtet eine UI-Auflistung Component named ein cms_page_listing
vendor/magento/module-cms/view/adminhtml/ui_component/cms_page_listing.xml
Die folgende DI-Injection teilt Magento mit, dass cms_page_listingeine Magento\Cms\Model\ResourceModel\Page\Grid\CollectionSammlung verwendet werden soll.
<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>
Dies scheint die Hauptsammlung zu sein, die zum Auffüllen des Rasters verwendet wird.
Dies ist jedoch auch PageGridDataProviderin der cms_page_listingKonfiguration enthalten.
<!-- 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>
Das wird PageGridDataProviderin einen virtualType aufgelöst
<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>
Dieser virtuelle Typ konfiguriert eine zweite Sammlung ( Magento\Cms\Model\ResourceModel\Page\Collection).
Es ist nicht klar, warum diese zweite Konfiguration benötigt wird oder welche Rolle sie beim Erstellen eines Rasters spielt. Die übergeordnete Frage ist wahrscheinlich, welche Rolle das dataProviderbeim Erstellen eines UI-Gitters spielt . Die größere Frage ist wahrscheinlich, welche PHP-Objekte erstellt werden, um ein UI-Listenraster zu erstellen, und wie eine Konfiguration sie steuert