custom/plugins/SwagEnterpriseSearchPlatform/src/Controller/SearchController.php line 62

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Swag\EnterpriseSearch\Controller;
  3. use Shopware\Core\Framework\Routing\Annotation\RouteScope;
  4. use Shopware\Core\Framework\Routing\Exception\MissingRequestParameterException;
  5. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  6. use Shopware\Storefront\Controller\StorefrontController;
  7. use Shopware\Storefront\Framework\Cache\Annotation\HttpCache;
  8. use Shopware\Storefront\Page\Search\SearchPageLoader as ShopwareSearchPageLoader;
  9. use Swag\EnterpriseSearch\Action\ActionType\RedirectActionException;
  10. use Swag\EnterpriseSearch\Search\Page\SearchPageLoader;
  11. use Swag\EnterpriseSearch\Suggest\Page\SuggestPageLoader;
  12. use Symfony\Component\Cache\Adapter\AdapterInterface;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. /**
  17.  * @RouteScope(scopes={"storefront"})
  18.  */
  19. class SearchController extends StorefrontController
  20. {
  21.     private const NAME 'product-search-route';
  22.     /**
  23.      * @var SearchPageLoader
  24.      */
  25.     private $searchPageLoader;
  26.     /**
  27.      * @var SuggestPageLoader
  28.      */
  29.     private $suggestPageLoader;
  30.     /**
  31.      * @var ShopwareSearchPageLoader
  32.      */
  33.     private $productPageLoader;
  34.     /**
  35.      * @var AdapterInterface
  36.      */
  37.     private $cache;
  38.     public function __construct(
  39.         SearchPageLoader $searchPageLoader,
  40.         SuggestPageLoader $suggestPageLoader,
  41.         ShopwareSearchPageLoader $productPageLoader,
  42.         AdapterInterface $cache
  43.     ) {
  44.         $this->searchPageLoader $searchPageLoader;
  45.         $this->suggestPageLoader $suggestPageLoader;
  46.         $this->productPageLoader $productPageLoader;
  47.         $this->cache $cache;
  48.     }
  49.     /**
  50.      * @HttpCache()
  51.      * @Route("/search", name="frontend.search.page", methods={"GET"})
  52.      */
  53.     public function search(SalesChannelContext $contextRequest $request): Response
  54.     {
  55.         $term $request->get('search');
  56.         $key md5(json_encode([
  57.             self::NAME,
  58.             method_exists($context'getSalesChannelId') ? $context->getSalesChannelId() : '',
  59.             method_exists($context'getLanguageIdChain') ? implode(' '$context->getLanguageIdChain()) : '',
  60.             $term,
  61.             $context->getRuleIds(),
  62.             $context->getContext()->getVersionId(),
  63.             $context->getCurrency()->getId(),
  64.             $context->getCustomer() ? 'logged-in' 'not-logged-in',
  65.         ]));
  66.         $validTo null;
  67.         $item $this->cache->getItem($key);
  68.         if ($item->isHit()) {
  69.             return $item->get();
  70.         }
  71.         try {
  72.             $page $this->searchPageLoader->load($request$context);
  73.             $response $this->renderStorefront('@Storefront/storefront/page/search/index.html.twig', ['page' => $page]);
  74.         } catch (MissingRequestParameterException $missingRequestParameterException) {
  75.             $response $this->forwardToRoute('frontend.home.page');
  76.         } catch (RedirectActionException $redirectActionException) {
  77.             $validTo $redirectActionException->getValidTo();
  78.             $response $this->redirect($redirectActionException->getRoute());
  79.         }
  80.         $item->set($response);
  81.         $item->tag(self::NAME);
  82.         $item->expiresAt($validTo);
  83.         $this->cache->save($item);
  84.         return $response;
  85.     }
  86.     /**
  87.      * @HttpCache()
  88.      * @Route("/suggest", name="frontend.search.suggest", methods={"GET"}, defaults={"XmlHttpRequest"=true})
  89.      */
  90.     public function suggest(SalesChannelContext $contextRequest $request): Response
  91.     {
  92.         $page $this->suggestPageLoader->load($request$context);
  93.         return $this->renderStorefront('@Storefront/storefront/layout/header/search-suggest.html.twig', ['page' => $page]);
  94.     }
  95.     /**
  96.      * @HttpCache()
  97.      *
  98.      * Route to load the listing filters
  99.      *
  100.      * @Route("/widgets/search/{search}", name="widgets.search.pagelet", methods={"GET", "POST"}, defaults={"XmlHttpRequest"=true})
  101.      *
  102.      * @throws MissingRequestParameterException
  103.      *
  104.      * @deprecated tag:v3.3.0 use the Shopware SearchController methode instead.
  105.      */
  106.     public function pagelet(Request $requestSalesChannelContext $context): Response
  107.     {
  108.         $request->request->set('no-aggregations'true);
  109.         $page $this->productPageLoader->load($request$context);
  110.         return $this->renderStorefront('@Storefront/storefront/page/search/search-pagelet.html.twig', ['page' => $page]);
  111.     }
  112. }