Magento 2 มีคุณสมบัติใหม่ " uiComponent
" สิ่งนี้อนุญาตให้คุณรวม<uiComponent/>
แท็กอย่างง่ายในไฟล์ XML จัดการเลย์เอาต์ของคุณเพื่อเพิ่มสิ่งต่าง ๆ เช่นกริดและแบบฟอร์มในหน้าแอปพลิเคชันของคุณ
มันจะปรากฏว่าการกำหนดค่าสำหรับตารางข้อมูล (กlisting
) ต้องสองคอลเลกชันวัตถุมีการกำหนดค่า
บทบาทของการรวบรวมการกำหนดค่าแต่ละรายการด้านล่างคืออะไร หรือฉันจะเข้าใจผิดบทบาทของคอลเลกชันเหล่านี้หรือไม่ หรือมีวิธีการสร้างวัตถุกริดโดยใช้เพียงคอลเลกชันเดียว?
การกำหนดค่าต่อไปนี้ตั้งค่าองค์ประกอบรายการ UI ที่ชื่อ cms_page_listing
vendor/magento/module-cms/view/adminhtml/ui_component/cms_page_listing.xml
และ DI Injection ต่อไปนี้บอก 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
เล่นในการสร้างตาราง UI คำถามที่ใหญ่กว่านี้น่าจะเป็นสิ่งที่วัตถุ PHP ถูกสร้างขึ้นเพื่อสร้าง UI Listing Grid และการกำหนดค่าควบคุมพวกมันอย่างไร