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_listing
eine Magento\Cms\Model\ResourceModel\Page\Grid\Collection
Sammlung 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 PageGridDataProvider
in der cms_page_listing
Konfiguration 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 PageGridDataProvider
in 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 dataProvider
beim 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