마 젠토 2 : 왜 UI 리스팅 컴포넌트가 두 개의 컬렉션을 필요로합니까?


16

마 젠토 2에는 새로운 " uiComponent"기능이 있습니다. 이를 통해 <uiComponent/>레이아웃 핸들 XML 파일에 간단한 태그 를 포함시켜 그리드 및 양식과 같은 것을 애플리케이션 페이지에 추가 할 수 있습니다.

표시 데이터 그리드 (a 대한 구성 해당 listing)가 필요 컬렉션 오브젝트가 구성 될 수있다.

아래 각 구성 모음의 역할은 무엇입니까? 아니면이 컬렉션의 역할을 이해하지 못합니까? 아니면 단일 컬렉션 만 사용하여 그리드 객체를 생성하는 방법이 있습니까?

다음 구성은 UI라는 이름의 UI 구성 요소를 설정합니다. cms_page_listing

vendor/magento/module-cms/view/adminhtml/ui_component/cms_page_listing.xml

그리고 다음 DI 인젝션은 마 젠토 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>

이것은 그리드를 채우는 데 사용되는 기본 컬렉션 인 것 같습니다.

그러나 ,이 거기 PageGridDataProvidercms_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>

PageGridDataProvidervirtualType로 확인

<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)을 구성합니다 .

이 두 번째 구성이 왜 필요한지 또는 그리드를 만드는 데있어 그 역할이 무엇인지는 확실하지 않습니다. 더 높은 수준의 질문은 아마도 UI Grid를 만드는 데 어떤 역할을 하는가dataProvider 입니다. 더 큰 문제는 아마도 UI Listing Grid를 생성하기 위해 어떤 PHP 객체가 생성되고, 어떻게 구성이 객체를 제어 하는가입니다.

답변:


10

첫 번째 질문에 대한 빠른 답변입니다.

가상 유형 구성이 필요하지 않습니다. 살펴보면 Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider이 두 인수 ( "collection"및 "filterPool") 중 어느 것도 사용되지 않는 것을 알 수 있습니다.

사용하지 않는 구성은 최대한 빨리 제거하겠습니다. 따라서 데이터 제공자 가상 유형의 결과 선언은 다음과 같이 단순해야합니다.

CMS 페이지의 경우 :

<virtualType name="PageGridDataProvider" type="Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider"/>

CMS 블록

<virtualType name="PageGridDataProvider" type="Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider"/>

이제 알 수 있듯이 UI 구성 요소 구성 파일에서 데이터 공급자 가상 유형을 사용하도록 강요되지 않았으며 일반 데이터 공급자를 참조 할 수 있습니다 Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider. 우리는 개발자에게 또 다른 확장 점을 제공하기 위해 가상 유형을 사용하기로 결정했습니다.


알고 반갑습니다. 또한 그리드 컬렉션을 생성 할 필요가 없습니다. 가상 유형으로 선언 할 수도 있기 때문에 (이 지점을 처음 본 곳은 확실하지 않으며 magento2 개발 지점의 어딘가에 있습니다) github.com/davidverholen/magento2-teaser /blob/1.0/etc/…
David Verholen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.