En Magento 2.1, hay un total de 25 proveedores de datos de cuadrícula / listado de componentes UI configurados y en uso. Sus clases y ui_component
archivos de proveedor de datos se enumeran a continuación
Magento\Bundle\Ui\DataProvider\Product\BundleDataProvider bundle_product_listing.xmlMagento\Catalog\Ui\DataProvider\Product\Attributes\Listing product_attributes_grid.xml
Magento\Catalog\Ui\DataProvider\Product\ProductCustomOptionsDataProvider product_custom_options_listing.xml
Magento\Catalog\Ui\DataProvider\Product\ProductDataProvider configurable_associated_product_listing.xml
Magento\Catalog\Ui\DataProvider\Product\ProductDataProvider product_listing.xml
Magento\Catalog\Ui\DataProvider\Product\Related\CrossSellDataProvider crosssell_product_listing.xml
Magento\Catalog\Ui\DataProvider\Product\Related\RelatedDataProvider related_product_listing.xml
Magento\Catalog\Ui\DataProvider\Product\Related\UpSellDataProvider upsell_product_listing.xml
Magento\Cms\Ui\Component\DataProvider cms_block_listing.xml
Magento\Cms\Ui\Component\DataProvider cms_page_listing.xml
Magento\ConfigurableProduct\Ui\DataProvider\Attributes product_attributes_listing.xml
Magento\Customer\Ui\Component\DataProvider customer_listing.xml
Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider customer_online_grid.xml
Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider sales_order_creditmemo_grid.xml
Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider sales_order_grid.xml
Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider sales_order_invoice_grid.xml
Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider sales_order_shipment_grid.xml
Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider sales_order_view_creditmemo_grid.xml
Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider sales_order_view_invoice_grid.xml
Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider sales_order_view_shipment_grid.xml
Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider search_synonyms_grid.xml
BraintreeTransactionsDataProvider (virtual type) braintree_report.xml
Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider
Magento\GroupedProduct\Ui\DataProvider\Product\GroupedProductDataProvider grouped_product_listing.xml
Magento\Review\Ui\DataProvider\Product\ReviewDataProvider review_listing.xml
Magento\Theme\Ui\Component\Design\Config\DataProvider design_config_listing.xml
Según esta información, parece que hay dos clases base que los programadores de usuarios finales pueden usar para basar sus componentes de cuadrícula en
- Magento \ Framework \ View \ Element \ UiComponent \ DataProvider \ DataProvider
- Magento \ Ui \ DataProvider \ AbstractDataProvider
La Magento\Ui\DataProvider\AbstractDataProvider
clase parece ser la más simple de las dos y (¿parece?) Solo requiere la configuración de un modelo de recursos de Magento. El Magento\Customer\Ui\Component\DataProvider
módulo de cuadrícula del cliente se basa en esta clase y parece tener todas las funciones de clasificación, filtrado, etc. necesarias para un listado de cuadrícula.
¿Existe alguna razón para que Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider
exista, o es solo un código más antiguo / más nuevo que adopta un enfoque diferente para crear un proveedor de datos? En otras palabras, ¿el uso de Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider
trae algunas características adicionales a la tabla o permite que otras partes del sistema hagan cosas con la cuadrícula? Al mirar el código fuente, Magento\Framework\App\RequestInterface
parece intrigante, ya que implica que podría estar informando la funcionalidad "gratis" con estas cuadrículas. Sin embargo, sin un extenso safari de código, no estoy seguro de si eso es cierto o no, y espero que alguien tenga una explicación clara de por qué usaría una clase sobre la otra.
fuente
Respuestas:
Para mí, esa diferencia principal es que
Magento/Framework/View/Element/UiComponent/DataProvider/DataProvider
utiliza la API de búsqueda.Las siguientes clases se utilizan en esta clase:
Magento\Framework\Api\FilterBuilder
Magento\Framework\Api\Search\ReportingInterface
Magento\Framework\Api\Search\SearchCriteria
Magento\Framework\Api\Search\SearchCriteriaBuilder
Magento\Framework\Api\Search\SearchResultInterface
Que se utilizan para filtrar / ordenar / paginar:
Y también obviamente para la búsqueda:
Lo que es interesante si
Magento/Ui/DataProvider/AbstractDataProvider
menciona la API de búsqueda pero no la usa en absoluto:Ahora, si revisas el historial de esos archivos en GitHub, esto es lo que obtienes:
Como puede ver, la mayoría de los commits para esos dos archivos están vinculados al siguiente ticket interno:
MAGETWO-39905: UI components compatibility with Search API
Incluso si se ha hecho para el
Magento/Framework
archivo, nunca se ha hecho para elMagento/Ui
archivo.Aparte de eso, no veo ninguna diferencia entre esos archivos. Uno está trabajando directamente en la colección, el otro está utilizando la API de búsqueda para generar los resultados.
fuente