vendor/shopware/storefront/Page/Suggest/SuggestPageLoader.php line 63

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Storefront\Page\Suggest;
  3. use Shopware\Core\Content\Category\Exception\CategoryNotFoundException;
  4. use Shopware\Core\Content\Product\SalesChannel\Suggest\AbstractProductSuggestRoute;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Exception\InconsistentCriteriaIdsException;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  7. use Shopware\Core\Framework\Log\Package;
  8. use Shopware\Core\Framework\Routing\Exception\MissingRequestParameterException;
  9. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  10. use Shopware\Storefront\Page\GenericPageLoaderInterface;
  11. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  12. use Symfony\Component\HttpFoundation\Request;
  13. #[Package('system-settings')]
  14. class SuggestPageLoader
  15. {
  16.     /**
  17.      * @var EventDispatcherInterface
  18.      */
  19.     private $eventDispatcher;
  20.     /**
  21.      * @var AbstractProductSuggestRoute
  22.      */
  23.     private $productSuggestRoute;
  24.     /**
  25.      * @var GenericPageLoaderInterface
  26.      */
  27.     private $genericLoader;
  28.     /**
  29.      * @internal
  30.      */
  31.     public function __construct(
  32.         EventDispatcherInterface $eventDispatcher,
  33.         AbstractProductSuggestRoute $productSuggestRoute,
  34.         GenericPageLoaderInterface $genericLoader
  35.     ) {
  36.         $this->eventDispatcher $eventDispatcher;
  37.         $this->productSuggestRoute $productSuggestRoute;
  38.         $this->genericLoader $genericLoader;
  39.     }
  40.     /**
  41.      * @throws CategoryNotFoundException
  42.      * @throws InconsistentCriteriaIdsException
  43.      * @throws MissingRequestParameterException
  44.      */
  45.     public function load(Request $requestSalesChannelContext $salesChannelContext): SuggestPage
  46.     {
  47.         $page $this->genericLoader->load($request$salesChannelContext);
  48.         $page SuggestPage::createFrom($page);
  49.         $criteria = new Criteria();
  50.         $criteria->setLimit(10);
  51.         $criteria->setTotalCountMode(Criteria::TOTAL_COUNT_MODE_EXACT);
  52.         $page->setSearchResult(
  53.             $this->productSuggestRoute
  54.                 ->load($request$salesChannelContext$criteria)
  55.                 ->getListingResult()
  56.         );
  57.         $page->setSearchTerm($request->query->get('search'));
  58.         $this->eventDispatcher->dispatch(
  59.             new SuggestPageLoadedEvent($page$salesChannelContext$request)
  60.         );
  61.         return $page;
  62.     }
  63. }