objectManager = $objectManager; $this->enginePool = $engines; $this->engineResolver = $engineResolver; } /** * Get engine singleton * * @return EngineInterface */ public function get() { if (!$this->engine) { $currentEngine = $this->engineResolver->getCurrentSearchEngine(); if (!isset($this->enginePool[$currentEngine])) { throw new \LogicException( 'There is no such engine: ' . $currentEngine ); } $engineClassName = $this->enginePool[$currentEngine]; $engine = $this->objectManager->create($engineClassName); if (false === $engine instanceof EngineInterface) { throw new \LogicException( $currentEngine . ' doesn\'t implement ' . EngineInterface::class ); } /** @var $engine EngineInterface */ if ($engine && !$engine->isAvailable()) { throw new \LogicException( 'Engine is not available: ' . $currentEngine ); } $this->engine = $engine; } return $this->engine; } }