У Magento 2 є нова " uiComponent" функція. Це дозволяє вам включити простий <uiComponent/>тег у ваш макет обробляти XML-файли, щоб додати речі, такі як Сітки та форми, на сторінку свого додатка.
Це здається , що конфігурація для сітки даних (а listing) вимагає двох об'єктів колекції будуть налаштовані.
Яка роль кожної колекції конфігурацій нижче? Або я неправильно розумію ролі цих колекцій? Або є спосіб створити об’єкт сітки, використовуючи лише одну колекцію?
Наступна конфігурація встановлює список компонентів, призначений для імені користувача cms_page_listing
vendor/magento/module-cms/view/adminhtml/ui_component/cms_page_listing.xml
І наступне введення DI вказує Magento, що cms_page_listingслід використовувати Magento\Cms\Model\ResourceModel\Page\Grid\Collectionколекцію.
<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>
Здається, це основна колекція, яка використовується для заповнення сітки.
Однак це також є PageGridDataProviderв cms_page_listingконфігурації.
<!-- 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>
У PageGridDataProviderп о с т в 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>
Цей віртуальний тип налаштовує другу колекцію ( Magento\Cms\Model\ResourceModel\Page\Collection).
Не ясно, навіщо потрібна ця друга конфігурація, або яка її роль у створенні сітки. Питання вищого рівня, ймовірно, яку роль dataProviderвідіграє у створенні сітки інтерфейсу користувача . Більш велике питання - це, ймовірно, які об’єкти PHP створені для створення сітки лістингу користувальницького інтерфейсу та як конфігурація керує ними