В Magento 2.1 сконфигурировано и используется всего 25 провайдеров данных о сетевом интерфейсе и данных. Их классы и ui_component
файлы провайдера данных перечислены ниже.
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
Основываясь на этой информации, кажется, что конечные пользователи могут использовать два базовых класса, чтобы основывать свои компоненты сетки на
- Magento \ Framework \ View \ Элемент \ UIComponent \ DataProvider \ DataProvider
- Magento \ Ui \ DataProvider \ AbstractDataProvider
Magento\Ui\DataProvider\AbstractDataProvider
Класс , кажется, проще из двух, и (кажется,?) Требует только конфигурации модели ресурсов Magento. Модуль сетки клиента Magento\Customer\Ui\Component\DataProvider
основан на этом классе и, похоже, обладает всеми функциями сортировки, фильтрации и т. Д., Необходимыми для вывода списка сетки.
Есть ли причина, по которой это Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider
существует - или это просто старый или более новый код, который использует другой подход к созданию поставщика данных? Другими словами, Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider
приносит ли использование дополнительных функций к таблице или позволяет другим частям системы работать с сеткой? Глядя на исходный код, это Magento\Framework\App\RequestInterface
кажется интригующим - поскольку это подразумевает, что вы можете сообщать о функциональности "бесплатно" с помощью этих сеток. Однако без обширного сафари по коду я не уверен, правда это или нет, и я надеюсь, что у кого-то есть четкое объяснение того, почему вы используете один класс над другим.
источник
Ответы:
Для меня это главное отличие заключается в том, что
Magento/Framework/View/Element/UiComponent/DataProvider/DataProvider
использует API поиска.В этом классе используются следующие классы:
Magento\Framework\Api\FilterBuilder
Magento\Framework\Api\Search\ReportingInterface
Magento\Framework\Api\Search\SearchCriteria
Magento\Framework\Api\Search\SearchCriteriaBuilder
Magento\Framework\Api\Search\SearchResultInterface
Которые используются для фильтрации / упорядочивания / подкачки:
А также, очевидно, для поиска:
Что интересно, если в нем
Magento/Ui/DataProvider/AbstractDataProvider
упоминается API поиска, но он вообще не используется:Теперь, если вы проверите историю этих файлов в GitHub, вот что вы получите:
Как видите, большинство коммитов для этих двух файлов связаны со следующим внутренним билетом:
MAGETWO-39905: UI components compatibility with Search API
Даже если это было сделано для
Magento/Framework
файла, оно никогда не было сделано дляMagento/Ui
файла.Кроме того, я не вижу никакой разницы между этими файлами. Один работает непосредственно над коллекцией, другой использует API поиска для генерации результатов.
источник