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

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