Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Search.php
Go to the documentation of this file.
1 <?php
7 
12 
13 class Search implements SearchInterface
14 {
18  private $requestBuilder;
19 
23  private $scopeResolver;
24 
28  private $searchEngine;
29 
33  private $searchResponseBuilder;
34 
41  public function __construct(
42  Builder $requestBuilder,
43  ScopeResolverInterface $scopeResolver,
44  SearchEngineInterface $searchEngine,
45  SearchResponseBuilder $searchResponseBuilder
46  ) {
47  $this->requestBuilder = $requestBuilder;
48  $this->scopeResolver = $scopeResolver;
49  $this->searchEngine = $searchEngine;
50  $this->searchResponseBuilder = $searchResponseBuilder;
51  }
52 
57  {
58  $this->requestBuilder->setRequestName($searchCriteria->getRequestName());
59 
60  $scope = $this->scopeResolver->getScope()->getId();
61  $this->requestBuilder->bindDimension('scope', $scope);
62 
63  foreach ($searchCriteria->getFilterGroups() as $filterGroup) {
64  foreach ($filterGroup->getFilters() as $filter) {
65  $this->addFieldToFilter($filter->getField(), $filter->getValue());
66  }
67  }
68 
69  $this->requestBuilder->setFrom($searchCriteria->getCurrentPage() * $searchCriteria->getPageSize());
70  $this->requestBuilder->setSize($searchCriteria->getPageSize());
71  $request = $this->requestBuilder->create();
72  $searchResponse = $this->searchEngine->search($request);
73 
74  return $this->searchResponseBuilder->build($searchResponse)
75  ->setSearchCriteria($searchCriteria);
76  }
77 
85  private function addFieldToFilter($field, $condition = null)
86  {
87  if (!is_array($condition) || !in_array(key($condition), ['from', 'to'], true)) {
88  $this->requestBuilder->bind($field, $condition);
89  } else {
90  if (!empty($condition['from'])) {
91  $this->requestBuilder->bind("{$field}.from", $condition['from']);
92  }
93  if (!empty($condition['to'])) {
94  $this->requestBuilder->bind("{$field}.to", $condition['to']);
95  }
96  }
97 
98  return $this;
99  }
100 }
__construct(Builder $requestBuilder, ScopeResolverInterface $scopeResolver, SearchEngineInterface $searchEngine, SearchResponseBuilder $searchResponseBuilder)
Definition: Search.php:41
search(SearchCriteriaInterface $searchCriteria)
Definition: Search.php:56
$searchCriteria