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

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