vendor/shopware/storefront/Page/GenericPageLoader.php line 90

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Storefront\Page;
  3. use Shopware\Core\Checkout\Payment\SalesChannel\AbstractPaymentMethodRoute;
  4. use Shopware\Core\Checkout\Shipping\SalesChannel\AbstractShippingMethodRoute;
  5. use Shopware\Core\Content\Category\Exception\CategoryNotFoundException;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Exception\InconsistentCriteriaIdsException;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  8. use Shopware\Core\Framework\Routing\Exception\MissingRequestParameterException;
  9. use Shopware\Core\SalesChannelRequest;
  10. use Shopware\Core\System\Annotation\Concept\ExtensionPattern\Decoratable;
  11. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  12. use Shopware\Core\System\SystemConfig\SystemConfigService;
  13. use Shopware\Storefront\Event\RouteRequest\PaymentMethodRouteRequestEvent;
  14. use Shopware\Storefront\Event\RouteRequest\ShippingMethodRouteRequestEvent;
  15. use Shopware\Storefront\Pagelet\Footer\FooterPageletLoaderInterface;
  16. use Shopware\Storefront\Pagelet\Header\HeaderPageletLoaderInterface;
  17. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  18. use Symfony\Component\HttpFoundation\Request;
  19. /**
  20.  * @Decoratable()
  21.  */
  22. class GenericPageLoader implements GenericPageLoaderInterface
  23. {
  24.     /**
  25.      * @var HeaderPageletLoaderInterface
  26.      */
  27.     private $headerLoader;
  28.     /**
  29.      * @var FooterPageletLoaderInterface
  30.      */
  31.     private $footerLoader;
  32.     /**
  33.      * @var SystemConfigService
  34.      */
  35.     private $systemConfigService;
  36.     /**
  37.      * @var AbstractPaymentMethodRoute
  38.      */
  39.     private $paymentMethodRoute;
  40.     /**
  41.      * @var AbstractShippingMethodRoute
  42.      */
  43.     private $shippingMethodRoute;
  44.     /**
  45.      * @var EventDispatcherInterface
  46.      */
  47.     private $eventDispatcher;
  48.     public function __construct(
  49.         HeaderPageletLoaderInterface $headerLoader,
  50.         FooterPageletLoaderInterface $footerLoader,
  51.         SystemConfigService $systemConfigService,
  52.         AbstractPaymentMethodRoute $paymentMethodRoute,
  53.         AbstractShippingMethodRoute $shippingMethodRoute,
  54.         EventDispatcherInterface $eventDispatcher
  55.     ) {
  56.         $this->headerLoader $headerLoader;
  57.         $this->footerLoader $footerLoader;
  58.         $this->systemConfigService $systemConfigService;
  59.         $this->paymentMethodRoute $paymentMethodRoute;
  60.         $this->shippingMethodRoute $shippingMethodRoute;
  61.         $this->eventDispatcher $eventDispatcher;
  62.     }
  63.     /**
  64.      * @throws CategoryNotFoundException
  65.      * @throws InconsistentCriteriaIdsException
  66.      * @throws MissingRequestParameterException
  67.      */
  68.     public function load(Request $requestSalesChannelContext $context): Page
  69.     {
  70.         $page = new Page();
  71.         if ($request->isXmlHttpRequest()) {
  72.             $this->eventDispatcher->dispatch(
  73.                 new GenericPageLoadedEvent($page$context$request)
  74.             );
  75.             return $page;
  76.         }
  77.         $page->setHeader(
  78.             $this->headerLoader->load($request$context)
  79.         );
  80.         $page->setFooter(
  81.             $this->footerLoader->load($request$context)
  82.         );
  83.         $criteria = new Criteria();
  84.         $criteria->setTitle('generic-page::shipping-methods');
  85.         $event = new ShippingMethodRouteRequestEvent($request, new Request(), $context$criteria);
  86.         $this->eventDispatcher->dispatch($event);
  87.         $shippingMethods $this->shippingMethodRoute
  88.             ->load($event->getStoreApiRequest(), $context$event->getCriteria())
  89.             ->getShippingMethods();
  90.         $page->setSalesChannelShippingMethods($shippingMethods);
  91.         $criteria = new Criteria();
  92.         $criteria->setTitle('generic-page::payment-methods');
  93.         $event = new PaymentMethodRouteRequestEvent($request, new Request(), $context$criteria);
  94.         $this->eventDispatcher->dispatch($event);
  95.         $paymentMethods $this->paymentMethodRoute
  96.             ->load($event->getStoreApiRequest(), $context$event->getCriteria())
  97.             ->getPaymentMethods();
  98.         $page->setSalesChannelPaymentMethods($paymentMethods);
  99.         $page->setMetaInformation((new MetaInformation())->assign([
  100.             'revisit' => '15 days',
  101.             'robots' => 'index,follow',
  102.             'xmlLang' => $request->attributes->get(SalesChannelRequest::ATTRIBUTE_DOMAIN_LOCALE) ?? '',
  103.             'metaTitle' => $this->systemConfigService->getString('core.basicInformation.shopName'$context->getSalesChannel()->getId()),
  104.         ]));
  105.         $this->eventDispatcher->dispatch(
  106.             new GenericPageLoadedEvent($page$context$request)
  107.         );
  108.         return $page;
  109.     }
  110. }