custom/plugins/SwagEnterpriseSearchPlatform/src/Search/MultiSearchGateway.php line 38

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Swag\EnterpriseSearch\Search;
  3. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  4. use Shopware\Storefront\Framework\Page\StorefrontSearchResult;
  5. use Swag\EnterpriseSearch\Configuration\GatewayNotConfiguredException;
  6. use Swag\EnterpriseSearch\Configuration\ZeroLimitException;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
  9. class MultiSearchGateway implements MultiSearchGatewayInterface
  10. {
  11.     /**
  12.      * @var SearchGatewayInterface[]
  13.      */
  14.     private $searchGateways;
  15.     /**
  16.      * @var EventDispatcherInterface
  17.      */
  18.     private $eventDispatcher;
  19.     public function __construct(
  20.         \Traversable $searchGateways,
  21.         EventDispatcherInterface $eventDispatcher
  22.     ) {
  23.         $this->searchGateways iterator_to_array($searchGateways);
  24.         $this->eventDispatcher $eventDispatcher;
  25.     }
  26.     public function search(Request $requestSalesChannelContext $salesChannelContext): MultiSearchResult
  27.     {
  28.         $multiSearchResult = new MultiSearchResult();
  29.         $this->eventDispatcher->dispatch(
  30.             new MultiSearchGatewayEvent(
  31.                 $request,
  32.                 $salesChannelContext,
  33.                 $multiSearchResult
  34.             )
  35.         );
  36.         foreach ($this->searchGateways as $entityName => $gateway) {
  37.             try {
  38.                 $storeFrontSearchResult StorefrontSearchResult::createFrom($gateway->search($request$salesChannelContext));
  39.                 $multiSearchResult->addSearch($storeFrontSearchResult$entityName);
  40.             } catch (GatewayNotConfiguredException ZeroLimitException $e) {
  41.                 //nth
  42.             }
  43.         }
  44.         return $multiSearchResult;
  45.     }
  46. }