W Magento 2.1 skonfigurowanych i używanych jest 25 dostawców komponentów UI / danych sieci grid. Klasy i ui_component
pliki ich dostawców danych są wymienione poniżej
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
Na podstawie tych informacji wydaje się, że istnieją dwie klasy podstawowe, z których programiści użytkownicy końcowi mogą korzystać na podstawie swoich komponentów grid
- Magento \ Framework \ View \ Element \ UiComponent \ DataProvider \ DataProvider
- Magento \ Ui \ DataProvider \ AbstractDataProvider
Magento\Ui\DataProvider\AbstractDataProvider
Klasa wydaje się prostsze z dwóch, i (zdaje się?) Wymaga tylko konfigurację modelu zasobów Magento. Magento\Customer\Ui\Component\DataProvider
Moduł siatki klienta jest oparty na tej klasie i wydaje się, że ma wszystkie funkcje sortowania, filtrowania itp. Potrzebne do wyświetlenia listy siatki.
Czy istnieje powód, dla którego Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider
istnieje - czy to tylko starszy / nowszy kod, który ma inne podejście do tworzenia dostawcy danych? Innymi słowy, czy użycie funkcji Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider
przynosi jakieś dodatkowe funkcje do tabeli, czy umożliwia innym częściom systemu wykonywanie zadań z siatką? Patrząc na kod źródłowy, Magento\Framework\App\RequestInterface
wydaje się to intrygujące - ponieważ sugeruje, że możesz raportować funkcjonalność „za darmo” z tymi siatkami. Jednak bez obszernego safari po kodzie nie jestem pewien, czy to prawda, czy nie, i mam nadzieję, że ktoś ma jasne wytłumaczenie, dlaczego korzystasz z jednej klasy nad drugą.
źródło
Odpowiedzi:
Dla mnie ta główna różnica polega na tym, że
Magento/Framework/View/Element/UiComponent/DataProvider/DataProvider
używa interfejsu API wyszukiwania.W tej klasie używane są następujące klasy:
Magento\Framework\Api\FilterBuilder
Magento\Framework\Api\Search\ReportingInterface
Magento\Framework\Api\Search\SearchCriteria
Magento\Framework\Api\Search\SearchCriteriaBuilder
Magento\Framework\Api\Search\SearchResultInterface
Które są używane do filtrowania / zamawiania / stronicowania:
A także oczywiście do wyszukiwania:
Co ciekawe, jeśli
Magento/Ui/DataProvider/AbstractDataProvider
wspomina o interfejsie API wyszukiwania, ale w ogóle go nie używa:Teraz, jeśli sprawdzisz historię tych plików w GitHub, oto co otrzymasz:
Jak widać, większość zatwierdzeń dla tych dwóch plików jest połączonych z następującym wewnętrznym biletem:
MAGETWO-39905: UI components compatibility with Search API
Nawet jeśli zostało to zrobione dla
Magento/Framework
pliku, nigdy nie zostało zrobione dlaMagento/Ui
pliku.Poza tym nie widzę żadnej różnicy między tymi plikami. Jeden pracuje bezpośrednio nad kolekcją, drugi korzysta z interfejsu API wyszukiwania do generowania wyników.
źródło