Magento 2:2つのグリッドコンポーネントデータプロバイダーの違いは何ですか?


16

Magento 2.1では、合計25のUIコンポーネントリスト/グリッドデータプロバイダーが構成され、使用されています。データプロバイダーのクラスと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

この情報に基づいて、エンドユーザープログラマーがグリッドコンポーネントのベースに使用できる2つの基本クラスがあるようです。

  • Magento \ Framework \ View \ Element \ UiComponent \ DataProvider \ DataProvider
  • Magento \ Ui \ DataProvider \ AbstractDataProvider

このMagento\Ui\DataProvider\AbstractDataProviderクラスは2つのうちより単純であるようであり、Magentoリソースモデルの設定のみが必要なようです。顧客グリッドMagento\Customer\Ui\Component\DataProviderモジュールはこのクラスに基づいており、グリッドリストに必要なすべての並べ替え、フィルタリングなどの機能を備えているようです。

存在する理由はありMagento\Framework\View\Element\UiComponent\DataProvider\DataProviderますか?それとも、データプロバイダーを作成するために異なるアプローチをとる古い/新しいコードですか?言い換えると、を使用するMagento\Framework\View\Element\UiComponent\DataProvider\DataProviderと、テーブルに追加の機能が追加されますか、それともシステムの他の部分がグリッドで処理できるようになりますか?ソースコードを見ると、Magento\Framework\App\RequestInterface興味をそそられているように見えます。これは、これらのグリッドで「無料」で機能を報告している可能性があることを意味します。ただし、広範なコードサファリがなければ、それが真実かどうかはわかりません。あるクラスを他のクラスよりも使用する理由を誰かが明確に説明してくれることを期待しています。


ちなみに良い質問ですが、adminでのカスタムモジュールのエクスポートに関する問題を解決するのに役立ちました。間違ったDataproviderタイプ「Magento \ Ui \ DataProvider \ AbstractDataProvider」を使用していました。
サンジェイチャダリー

回答:


14

私にとって、その主な違いはMagento/Framework/View/Element/UiComponent/DataProvider/DataProvider、Search 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

フィルタリング/順序付け/ページングに使用されるもの:

public function addFilter(\Magento\Framework\Api\Filter $filter)
{
    $this->searchCriteriaBuilder->addFilter($filter);
}

public function addOrder($field, $direction)
{
    $this->searchCriteriaBuilder->addSortOrder($field, $direction);
}

public function setLimit($offset, $size)
{
    $this->searchCriteriaBuilder->setPageSize($size);
    $this->searchCriteriaBuilder->setCurrentPage($offset);
}

また、明らかに検索用:

public function getData()
{
    return $this->searchResultToOutput($this->getSearchResult());
}

protected function searchResultToOutput(SearchResultInterface $searchResult)
{
    $arrItems = [];

    $arrItems['items'] = [];
    foreach ($searchResult->getItems() as $item) {
        $itemData = [];
        foreach ($item->getCustomAttributes() as $attribute) {
            $itemData[$attribute->getAttributeCode()] = $attribute->getValue();
        }
        $arrItems['items'][] = $itemData;
    }

    $arrItems['totalRecords'] = $searchResult->getTotalCount();

    return $arrItems;
}

public function getSearchResult()
{
    return $this->reporting->search($this->getSearchCriteria());
}

Magento/Ui/DataProvider/AbstractDataProviderSearch APIについて言及しているが、まったく使用しない場合は興味深いものです。

public function getSearchCriteria()
{
    //TODO: Technical dept, should be implemented as part of SearchAPI support for Catalog Grids
    return null;
}

public function getSearchResult()
{
    //TODO: Technical dept, should be implemented as part of SearchAPI support for Catalog Grids
    return $this->getCollection();
}

GitHubでこれらのファイルの履歴を確認すると、次のようになります。

ご覧のとおり、これら2つのファイルのコミットのほとんどは、次の内部チケットにリンクされています。 MAGETWO-39905: UI components compatibility with Search API

Magento/Frameworkファイルに対して実行された場合でも、ファイルに対して実行されたことはありませんMagento/Ui

それ以外は、これらのファイルに違いは見られません。1つはコレクションに直接取り組んでおり、もう1つはSearch APIを使用して結果を生成しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.