Magento 2: Tại sao Thành phần Danh sách UI cần Hai Bộ sưu tập?


16

Magento 2 có uiComponenttính năng "" mới. Điều này cho phép bạn bao gồm một <uiComponent/>thẻ đơn giản trong bố cục của bạn xử lý các tệp XML để thêm những thứ như Lưới và biểu mẫu vào trang ứng dụng của bạn.

Dường như cấu hình cho lưới dữ liệu (a listing) yêu cầu hai đối tượng thu thập được cấu hình.

Vai trò của mỗi bộ sưu tập cấu hình dưới đây là gì? Hay tôi hiểu sai vai trò của những bộ sưu tập này? Hoặc có cách nào để tạo đối tượng lưới chỉ bằng một bộ sưu tập không?

Cấu hình sau đây thiết lập Thành phần danh sách UI có tên cms_page_listing

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

Và DI tiêm sau đây nói với Magento rằng cms_page_listingnên sử dụng một Magento\Cms\Model\ResourceModel\Page\Grid\Collectionbộ sưu tập.

<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>

Đây dường như là bộ sưu tập chính được sử dụng để điền vào lưới điện.

Tuy nhiên , cũng có cái này PageGridDataProvidertrong cms_page_listingcấu hình.

<!-- 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>

Việc phân PageGridDataProvidergiải thành một 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>

Kiểu ảo này cấu hình bộ sưu tập thứ hai ( Magento\Cms\Model\ResourceModel\Page\Collection).

Không rõ tại sao cấu hình thứ hai này là cần thiết, hoặc vai trò của nó là gì trong việc tạo lưới. Câu hỏi mức độ cao hơn có lẽ là vai trò gì hiện các dataProvidervở kịch trong việc tạo ra một giao diện người dùng Lưới . Câu hỏi lớn hơn có lẽ là các đối tượng PHP nào được tạo để tạo Lưới danh sách giao diện người dùng và cách cấu hình kiểm soát chúng

Câu trả lời:


10

Đây là một câu trả lời nhanh cho câu hỏi đầu tiên của bạn:

Cấu hình cho loại ảo không bắt buộc. Nếu bạn nhìn vào, Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderbạn sẽ thấy rằng không có một trong hai đối số nào được sử dụng ("bộ sưu tập" cũng như "bộ lọcPool").

Chúng tôi sẽ xóa cấu hình không sử dụng này ngay khi có thể. Vì vậy, khai báo kết quả của các loại nhà cung cấp dữ liệu ảo nên đơn giản như sau:

cho các trang CMS:

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

và cho các khối CMS

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

Và như bây giờ bạn có thể thấy, trong các tệp cấu hình Thành phần giao diện người dùng, bạn không bị ép buộc sử dụng loại ảo của nhà cung cấp dữ liệu và bạn có thể tham khảo nhà cung cấp dữ liệu chung Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider. Chúng tôi đã quyết định sử dụng loại ảo, chỉ để cung cấp một điểm mở rộng khác cho các nhà phát triển.


rất vui được biết Ngoài ra, không cần thiết phải tạo Bộ sưu tập lưới vì nó cũng có thể được khai báo là loại ảo (tôi không chắc là tôi đã thấy cái này ở đâu trước tiên, tôi nghĩ ở đâu đó trong nhánh phát triển magento2) github.com/davidverholen/magento2-teaser /blob/1.0/etc/ từ
David Verholen 8/2/2016
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.