Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
SourceItemCollectionFactory.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
21 
26 {
31 
35  private $objectManager;
36 
40  private $filterProcessor;
41 
45  private $columnProvider;
46 
52  public function __construct(
53  ObjectManagerInterface $objectManager,
54  FilterProcessorAggregator $filterProcessor,
55  ColumnProviderInterface $columnProvider
56  ) {
57  $this->objectManager = $objectManager;
58  $this->filterProcessor = $filterProcessor;
59  $this->columnProvider = $columnProvider;
60  }
61 
69  {
71  $collection = $this->objectManager->create(Collection::class);
72  $columns = $this->columnProvider->getColumns($attributeCollection, $filters);
73  $collection->addFieldToSelect($columns);
74 
75  foreach ($this->retrieveFilterData($filters) as $columnName => $value) {
76  $attributeDefinition = $attributeCollection->getItemById($columnName);
77  if (!$attributeDefinition) {
78  throw new LocalizedException(__(
79  'Given column name "%columnName" is not present in collection.',
80  ['columnName' => $columnName]
81  ));
82  }
83 
84  $type = $attributeDefinition->getData('backend_type');
85  if (!$type) {
86  throw new LocalizedException(__(
87  'There is no backend type specified for column "%columnName".',
88  ['columnName' => $columnName]
89  ));
90  }
91 
92  $this->filterProcessor->process($type, $collection, $columnName, $value);
93  }
94  return $collection;
95  }
96 
101  private function retrieveFilterData(array $filters)
102  {
103  return array_filter(
105  function ($value) {
106  return $value !== '';
107  }
108  );
109  }
110 }
$objectManager
Definition: bootstrap.php:17
__()
Definition: __.php:13
$columns
Definition: default.phtml:15
$type
Definition: item.phtml:13
$value
Definition: gender.phtml:16
__construct(ObjectManagerInterface $objectManager, FilterProcessorAggregator $filterProcessor, ColumnProviderInterface $columnProvider)
$filters
Definition: uploader.phtml:11
create(AttributeCollection $attributeCollection, array $filters)