_objectManager = $objectManager; $this->handlers = $handlers; $this->engineResolver = $engineResolver; } /** * Create indexer handler * * @param array $data * @return IndexerInterface */ public function create(array $data = []) { $currentHandler = $this->engineResolver->getCurrentSearchEngine(); if (!isset($this->handlers[$currentHandler])) { throw new \LogicException( 'There is no such indexer handler: ' . $currentHandler ); } $indexer = $this->_objectManager->create($this->handlers[$currentHandler], $data); if (!$indexer instanceof IndexerInterface) { throw new \InvalidArgumentException( $currentHandler . ' indexer handler doesn\'t implement ' . IndexerInterface::class ); } if ($indexer && !$indexer->isAvailable()) { throw new \LogicException( 'Indexer handler is not available: ' . $currentHandler ); } return $indexer; } }