Magento 2 имеет новую uiComponent
функцию " ". Это позволяет вам включить простой <uiComponent/>
тег в XML-файлы дескриптора макета для добавления таких вещей, как сетки и формы, на страницу приложения.
Это кажется , что конфигурация для сетки данных (а listing
) требует двух объектов коллекции будут настроены.
Какова роль каждой коллекции конфигурации ниже? Или я неправильно понимаю роли этих коллекций? Или есть способ создать объект сетки, используя только одну коллекцию?
Следующая конфигурация настраивает Компонент перечисления пользовательского интерфейса с именем cms_page_listing
vendor/magento/module-cms/view/adminhtml/ui_component/cms_page_listing.xml
И следующий DI Injection сообщает Magento, что a 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 создаются для создания таблицы списков пользовательского интерфейса и как их контролирует конфигурация.