Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Builder.php
Go to the documentation of this file.
1 <?php
8 
12 
17 class Builder
18 {
22  private $objectManager;
23 
27  private $config;
28 
32  private $binder;
33 
37  private $data = [
38  'dimensions' => [],
39  'placeholder' => [],
40  ];
41 
45  private $cleaner;
46 
55  public function __construct(ObjectManagerInterface $objectManager, Config $config, Binder $binder, Cleaner $cleaner)
56  {
57  $this->objectManager = $objectManager;
58  $this->config = $config;
59  $this->binder = $binder;
60  $this->cleaner = $cleaner;
61  }
62 
69  public function setRequestName($requestName)
70  {
71  $this->data['requestName'] = $requestName;
72  return $this;
73  }
74 
81  public function setSize($size)
82  {
83  $this->data['size'] = $size;
84  return $this;
85  }
86 
93  public function setFrom($from)
94  {
95  $this->data['from'] = $from;
96  return $this;
97  }
98 
106  public function bindDimension($name, $value)
107  {
108  $this->data['dimensions'][$name] = $value;
109  return $this;
110  }
111 
119  public function bind($placeholder, $value)
120  {
121  $this->data['placeholder']['$' . $placeholder . '$'] = $value;
122  return $this;
123  }
124 
130  public function create()
131  {
132  if (!isset($this->data['requestName'])) {
133  throw new \InvalidArgumentException("Request name not defined.");
134  }
135  $requestName = $this->data['requestName'];
137  $data = $this->config->get($requestName);
138  if ($data === null) {
139  throw new NonExistingRequestNameException(new Phrase("Request name '%1' doesn't exist.", [$requestName]));
140  }
141 
142  $data = $this->binder->bind($data, $this->data);
143  $data = $this->cleaner->clean($data);
144 
145  $this->clear();
146 
147  return $this->convert($data);
148  }
149 
155  private function clear()
156  {
157  $this->data = [
158  'dimensions' => [],
159  'placeholder' => [],
160  ];
161  }
162 
169  private function convert($data)
170  {
172  $mapper = $this->objectManager->create(
173  \Magento\Framework\Search\Request\Mapper::class,
174  [
175  'objectManager' => $this->objectManager,
176  'rootQueryName' => $data['query'],
177  'queries' => $data['queries'],
178  'aggregations' => $data['aggregations'],
179  'filters' => $data['filters']
180  ]
181  );
182  return $this->objectManager->create(
183  \Magento\Framework\Search\Request::class,
184  [
185  'name' => $data['query'],
186  'indexName' => $data['index'],
187  'from' => $data['from'],
188  'size' => $data['size'],
189  'query' => $mapper->getRootQuery(),
190  'dimensions' => $this->buildDimensions(isset($data['dimensions']) ? $data['dimensions'] : []),
191  'buckets' => $mapper->getBuckets()
192  ]
193  );
194  }
195 
200  private function buildDimensions(array $dimensionsData)
201  {
202  $dimensions = [];
203  foreach ($dimensionsData as $dimensionData) {
204  $dimensions[$dimensionData['name']] = $this->objectManager->create(
205  \Magento\Framework\Search\Request\Dimension::class,
206  $dimensionData
207  );
208  }
209  return $dimensions;
210  }
211 }
$objectManager
Definition: bootstrap.php:17
$config
Definition: fraud_order.php:17
$value
Definition: gender.phtml:16
__construct(ObjectManagerInterface $objectManager, Config $config, Binder $binder, Cleaner $cleaner)
Definition: Builder.php:55