custom/plugins/SwagEnterpriseSearchPlatform/src/Search/Page/SearchPageLoader.php line 46

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Swag\EnterpriseSearch\Search\Page;
  3. use Shopware\Core\Content\Category\Exception\CategoryNotFoundException;
  4. use Shopware\Core\Framework\DataAbstractionLayer\Exception\InconsistentCriteriaIdsException;
  5. use Shopware\Core\Framework\Routing\Exception\MissingRequestParameterException;
  6. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  7. use Shopware\Storefront\Page\GenericPageLoaderInterface;
  8. use Swag\EnterpriseSearch\Search\MultiSearchGatewayInterface;
  9. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  10. use Symfony\Component\HttpFoundation\Request;
  11. class SearchPageLoader
  12. {
  13.     /**
  14.      * @var GenericPageLoaderInterface
  15.      */
  16.     private $genericLoader;
  17.     /**
  18.      * @var MultiSearchGatewayInterface
  19.      */
  20.     private $searchGateway;
  21.     /**
  22.      * @var EventDispatcherInterface
  23.      */
  24.     private $eventDispatcher;
  25.     public function __construct(
  26.         GenericPageLoaderInterface $genericLoader,
  27.         MultiSearchGatewayInterface $searchGateway,
  28.         EventDispatcherInterface $eventDispatcher
  29.     ) {
  30.         $this->genericLoader $genericLoader;
  31.         $this->searchGateway $searchGateway;
  32.         $this->eventDispatcher $eventDispatcher;
  33.     }
  34.     /**
  35.      * @throws CategoryNotFoundException
  36.      * @throws InconsistentCriteriaIdsException
  37.      * @throws MissingRequestParameterException
  38.      */
  39.     public function load(Request $requestSalesChannelContext $salesChannelContext): SearchPage
  40.     {
  41.         $page $this->genericLoader->load($request$salesChannelContext);
  42.         $page SearchPage::createFrom($page);
  43.         if (!$request->query->has('search')) {
  44.             throw new MissingRequestParameterException('search');
  45.         }
  46.         $result $this->searchGateway->search($request$salesChannelContext);
  47.         $page->setSearchResult($result);
  48.         $page->setSearchTerm($this->getTerm($request));
  49.         $this->eventDispatcher->dispatch(
  50.             new SearchPageLoadedEvent($page$salesChannelContext$request)
  51.         );
  52.         return $page;
  53.     }
  54.     private function getTerm(Request $request): string
  55.     {
  56.         $term $request->query->get('search');
  57.         if (\is_array($term)) {
  58.             $term implode(' '$term);
  59.         }
  60.         return trim((string) $term);
  61.     }
  62. }