У 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 створені для створення сітки лістингу користувальницького інтерфейсу та як конфігурація керує ними