Linuxなどのメモ書き

Magento2 DataProvider関連のメモ


1. 概要

Magento2 エクステンションの作成 その4でGridにDataProviderを介してデータを読み込む処理を扱ったが、各クラスの関連がわかりづらいのでその解説。

 

2. 関連クラス

DataProvider

DBからデータを読み込みを行う大元のクラス。UI components等から指定するクラス。

Reporting

コレクションに対してページネーションのページ指定や絞り込み条件を指定して返す。

CollectionFactory

Modelの集合を扱うコレクションを生成する。

SearchResult

コレクションクラス。CollectionFactoryが生成するコレクションはSearchResultを継承している。

※namespaceはMagento\Framework\View\Element\UiComponent\DataProvider

3. データ取得時の流れ

各クラスの関連とデータ取得時の流れを図1に示す。

図1 DataProvider経由でデータを取得する流れ

 

まず、各クラスの関連としては、DataProviderはReportingを、ReportingはCollectionFactoryを所有する。CollectionFactoryは'topic_listing_data_source'のデータ取得リクエストに対してBitHive\Topic\Model\ResourceModel\Post\Grid\Collectionを生成して返すように$collectionsコンストラクタ引数が設定されている。これはTopicエクステンションのetc/di.xmlで設定している(Magento2 エクステンションの作成 その4参照)。

実際にGridのデータを取得する際には、DataProviderのgetSearchResult()が呼び出される。このあと順次、Reporting::search()、CollectionFactory::getReport()が呼び出される。getReport()が呼び出される際、GridのUI componentsの<dataProvider>タグのname属性で指定した'topic_listing_data_source'が引数として渡される。

CollectionFactoryは'topic_listing_data_source'に対してBitHive\Topic\Model\ResourceModel\Post\Grid\Collectionを生成するようにetc/di.xmlで設定されているので、このコレクションを生成して返す。Reportは返されたコレクションに検索条件等の絞り込み情報を追加してDataProviderに返すという流れになる。

Magento2 エクステンションの作成 その4でも説明したが、BitHive\Topic\Model\ResourceModel\Post\Grid\Collectionはetc/di.xmlで定義したVirtualTypeで実在はしない(Magento2が自動生成するという意味では存在するが)。etc/di.xmlでBitHive\Topic\...(略)...\CollectionはSearchResultクラスを継承するように設定されている。

 


最終更新 2018/12/05 18:41:56 - kztomita
(2018/12/05 18:13:12 作成)
添付ファイル
dataprovider.jpg - kztomita