Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
ProductDataProvider.php
Go to the documentation of this file.
1 <?php
7 
8 use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
12 
20 {
26  protected $collection;
27 
32 
37 
41  private $modifiersPool;
42 
54  public function __construct(
55  $name,
58  CollectionFactory $collectionFactory,
59  array $addFieldStrategies = [],
60  array $addFilterStrategies = [],
61  array $meta = [],
62  array $data = [],
63  PoolInterface $modifiersPool = null
64  ) {
65  parent::__construct($name, $primaryFieldName, $requestFieldName, $meta, $data);
66  $this->collection = $collectionFactory->create();
67  $this->addFieldStrategies = $addFieldStrategies;
68  $this->addFilterStrategies = $addFilterStrategies;
69  $this->modifiersPool = $modifiersPool ?: ObjectManager::getInstance()->get(PoolInterface::class);
70  }
71 
77  public function getData()
78  {
79  if (!$this->getCollection()->isLoaded()) {
80  $this->getCollection()->load();
81  }
82  $items = $this->getCollection()->toArray();
83 
84  $data = [
85  'totalRecords' => $this->getCollection()->getSize(),
86  'items' => array_values($items),
87  ];
88 
90  foreach ($this->modifiersPool->getModifiersInstances() as $modifier) {
91  $data = $modifier->modifyData($data);
92  }
93  return $data;
94  }
95 
103  public function addField($field, $alias = null)
104  {
105  if (isset($this->addFieldStrategies[$field])) {
106  $this->addFieldStrategies[$field]->addField($this->getCollection(), $field, $alias);
107  } else {
108  parent::addField($field, $alias);
109  }
110  }
111 
115  public function addFilter(\Magento\Framework\Api\Filter $filter)
116  {
117  if (isset($this->addFilterStrategies[$filter->getField()])) {
118  $this->addFilterStrategies[$filter->getField()]
119  ->addFilter(
120  $this->getCollection(),
121  $filter->getField(),
122  [$filter->getConditionType() => $filter->getValue()]
123  );
124  } else {
125  parent::addFilter($filter);
126  }
127  }
128 
132  public function getMeta()
133  {
134  $meta = parent::getMeta();
135 
137  foreach ($this->modifiersPool->getModifiersInstances() as $modifier) {
138  $meta = $modifier->modifyMeta($meta);
139  }
140 
141  return $meta;
142  }
143 }
__construct( $name, $primaryFieldName, $requestFieldName, CollectionFactory $collectionFactory, array $addFieldStrategies=[], array $addFilterStrategies=[], array $meta=[], array $data=[], PoolInterface $modifiersPool=null)
if(!trim($html)) $alias
Definition: details.phtml:20
$items