vendor/store.shopware.com/swagb2bplatform/SwagB2bPlatform/Routing/ViewAssigner.php line 50

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace SwagB2bPlatform\Routing;
  3. use Shopware\B2B\Shop\BridgePlatform\ContextProvider;
  4. use Shopware\Core\Content\Seo\SeoUrlPlaceholderHandlerInterface;
  5. use Shopware\Core\Framework\Adapter\Twig\TemplateFinderInterface;
  6. use Shopware\Storefront\Framework\Routing\RequestTransformer;
  7. use Shopware\Storefront\Page\GenericPageLoader;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\HttpKernel\Event\ViewEvent;
  11. use Symfony\Component\HttpKernel\KernelEvents;
  12. use Twig\Environment;
  13. use function is_array;
  14. class ViewAssigner implements EventSubscriberInterface
  15. {
  16.     private Environment $twig;
  17.     private ContextProvider $contextProvider;
  18.     private GenericPageLoader $pageLoader;
  19.     private SeoUrlPlaceholderHandlerInterface $seoUrlPlaceholderHandler;
  20.     private TemplateFinderInterface $templateFinder;
  21.     public function __construct(
  22.         Environment $twig,
  23.         ContextProvider $contextProvider,
  24.         GenericPageLoader $pageLoader,
  25.         SeoUrlPlaceholderHandlerInterface $seoUrlPlaceholderHandler,
  26.         TemplateFinderInterface $templateFinder
  27.     ) {
  28.         $this->twig $twig;
  29.         $this->contextProvider $contextProvider;
  30.         $this->pageLoader $pageLoader;
  31.         $this->seoUrlPlaceholderHandler $seoUrlPlaceholderHandler;
  32.         $this->templateFinder $templateFinder;
  33.     }
  34.     public static function getSubscribedEvents(): array
  35.     {
  36.         return [
  37.             KernelEvents::VIEW => 'wrapResponse',
  38.         ];
  39.     }
  40.     public function wrapResponse(ViewEvent $controllerEvent): void
  41.     {
  42.         $request $controllerEvent->getRequest();
  43.         $requestAttributes $request->attributes;
  44.         if (!$requestAttributes->has(RouteLoader::ROUTE_IS_B2B)) {
  45.             return;
  46.         }
  47.         $controllerResult $controllerEvent->getControllerResult();
  48.         if (!$this->isValidB2bControllerResult($controllerResult)) {
  49.             return;
  50.         }
  51.         $controllerResult['controllerName'] = $requestAttributes->get(RouteLoader::ROUTE_CONTROLLER_ROUTE_NAME);
  52.         $controllerResult['controllerAction'] = $requestAttributes->get(RouteLoader::ROUTE_CONTROLLER_ACTION);
  53.         $controllerResult['page'] = $this->pageLoader->load(
  54.             $request,
  55.             $this->contextProvider->getSalesChannelContext()
  56.         );
  57.         $templateName $requestAttributes->get(RouteLoader::ROUTE_TEMPLATE);
  58.         $viewScript $this->templateFinder->find('@SwagB2bPlatform/storefront/frontend/' $templateName '.html.twig');
  59.         $host $requestAttributes->get(RequestTransformer::SALES_CHANNEL_ABSOLUTE_BASE_URL)
  60.             . $requestAttributes->get(RequestTransformer::SALES_CHANNEL_BASE_URL);
  61.         $response = new Response($this->twig->render($viewScript$controllerResult));
  62.         $response->setContent(
  63.             $this->seoUrlPlaceholderHandler->replace(
  64.                 $response->getContent(),
  65.                 $host,
  66.                 $this->contextProvider->getSalesChannelContext()
  67.             )
  68.         );
  69.         $controllerEvent->setResponse($response);
  70.     }
  71.     /**
  72.      * @internal
  73.      */
  74.     protected function isValidB2bControllerResult($controllerResult): bool
  75.     {
  76.         if ($controllerResult === null) {
  77.             return true;
  78.         }
  79.         if (is_array($controllerResult)) {
  80.             return true;
  81.         }
  82.         return false;
  83.     }
  84. }