Magento 2 possui um novo " uiComponent
" recurso. Isso permite que você inclua uma <uiComponent/>
tag simples no seu arquivo XML de manipulação de layout para adicionar itens como grades e formulários à sua página de aplicativo.
Ele parece que a configuração de uma grelha de dados (a listing
) exige dois objectos de recolha ser configurado.
Qual é o papel de cada coleção de configuração abaixo? Ou entendo mal os papéis dessas coleções? Ou existe uma maneira de criar um objeto de grade usando apenas uma única coleção?
A configuração a seguir define um componente de listagem da interface do usuário denominado cms_page_listing
vendor/magento/module-cms/view/adminhtml/ui_component/cms_page_listing.xml
E a seguinte injeção DI diz ao Magento que a cms_page_listing
deve usar uma Magento\Cms\Model\ResourceModel\Page\Grid\Collection
coleção.
<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>
Essa parece ser a coleção principal usada para preencher a grade.
No entanto , também há isso PageGridDataProvider
na cms_page_listing
configuração.
<!-- 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>
Os PageGridDataProvider
resolve para um 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>
Esse tipo virtual configura uma segunda coleção ( Magento\Cms\Model\ResourceModel\Page\Collection
).
Não está claro por que essa segunda configuração é necessária ou qual é o seu papel na criação de uma grade. A questão de nível superior é provavelmente qual o papel dataProvider
desempenhado na criação de uma grade de interface do usuário . A questão maior é provavelmente: Quais objetos PHP são criados para criar uma Grade de Lista de UI e como a configuração os controla