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

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\Framework\DataAbstractionLayer\Search\Criteria;
  6. use Shopware\Core\Framework\Log\Package;
  7. use Shopware\Core\Profiling\Profiler;
  8. use Shopware\Core\SalesChannelRequest;
  9. use Shopware\Core\System\Annotation\Concept\ExtensionPattern\Decoratable;
  10. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  11. use Shopware\Core\System\SystemConfig\SystemConfigService;
  12. use Shopware\Storefront\Event\RouteRequest\PaymentMethodRouteRequestEvent;
  13. use Shopware\Storefront\Event\RouteRequest\ShippingMethodRouteRequestEvent;
  14. use Shopware\Storefront\Pagelet\Footer\FooterPageletLoaderInterface;
  15. use Shopware\Storefront\Pagelet\Header\HeaderPageletLoaderInterface;
  16. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  17. use Symfony\Component\HttpFoundation\Request;
  18. /**
  19.  * @Decoratable()
  20.  */
  21. #[Package('storefront')]
  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.     /**
  49.      * @internal
  50.      */
  51.     public function __construct(
  52.         HeaderPageletLoaderInterface $headerLoader,
  53.         FooterPageletLoaderInterface $footerLoader,
  54.         SystemConfigService $systemConfigService,
  55.         AbstractPaymentMethodRoute $paymentMethodRoute,
  56.         AbstractShippingMethodRoute $shippingMethodRoute,
  57.         EventDispatcherInterface $eventDispatcher
  58.     ) {
  59.         $this->headerLoader $headerLoader;
  60.         $this->footerLoader $footerLoader;
  61.         $this->systemConfigService $systemConfigService;
  62.         $this->paymentMethodRoute $paymentMethodRoute;
  63.         $this->shippingMethodRoute $shippingMethodRoute;
  64.         $this->eventDispatcher $eventDispatcher;
  65.     }
  66.     public function load(Request $requestSalesChannelContext $context): Page
  67.     {
  68.         return Profiler::trace('generic-page-loader', function () use ($request$context) {
  69.             $page = new Page();
  70.             if ($request->isXmlHttpRequest()) {
  71.                 $this->eventDispatcher->dispatch(
  72.                     new GenericPageLoadedEvent($page$context$request)
  73.                 );
  74.                 return $page;
  75.             }
  76.             $page->setHeader(
  77.                 $this->headerLoader->load($request$context)
  78.             );
  79.             $page->setFooter(
  80.                 $this->footerLoader->load($request$context)
  81.             );
  82.             $criteria = new Criteria();
  83.             $criteria->setTitle('generic-page::shipping-methods');
  84.             $event = new ShippingMethodRouteRequestEvent($request, new Request(), $context$criteria);
  85.             $this->eventDispatcher->dispatch($event);
  86.             $shippingMethods $this->shippingMethodRoute
  87.                 ->load($event->getStoreApiRequest(), $context$event->getCriteria())
  88.                 ->getShippingMethods();
  89.             $page->setSalesChannelShippingMethods($shippingMethods);
  90.             $criteria = new Criteria();
  91.             $criteria->setTitle('generic-page::payment-methods');
  92.             $event = new PaymentMethodRouteRequestEvent($request, new Request(), $context$criteria);
  93.             $this->eventDispatcher->dispatch($event);
  94.             $paymentMethods $this->paymentMethodRoute
  95.                 ->load($event->getStoreApiRequest(), $context$event->getCriteria())
  96.                 ->getPaymentMethods();
  97.             $page->setSalesChannelPaymentMethods($paymentMethods);
  98.             $page->setMetaInformation((new MetaInformation())->assign([
  99.                 'revisit' => '15 days',
  100.                 'robots' => 'index,follow',
  101.                 'xmlLang' => $request->attributes->get(SalesChannelRequest::ATTRIBUTE_DOMAIN_LOCALE) ?? '',
  102.                 'metaTitle' => $this->systemConfigService->getString('core.basicInformation.shopName'$context->getSalesChannel()->getId()),
  103.             ]));
  104.             $this->eventDispatcher->dispatch(
  105.                 new GenericPageLoadedEvent($page$context$request)
  106.             );
  107.             return $page;
  108.         });
  109.     }
  110. }