custom/plugins/SwagB2bPlatform/SwagB2bPlatform/Routing/ViewAssigner.php line 65

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.     /**
  17.      * @var Environment
  18.      */
  19.     private $twig;
  20.     /**
  21.      * @var ContextProvider
  22.      */
  23.     private $contextProvider;
  24.     /**
  25.      * @var GenericPageLoader
  26.      */
  27.     private $pageLoader;
  28.     /**
  29.      * @var SeoUrlPlaceholderHandlerInterface
  30.      */
  31.     private $seoUrlPlaceholderHandler;
  32.     /**
  33.      * @var TemplateFinderInterface
  34.      */
  35.     private $templateFinder;
  36.     public function __construct(
  37.         Environment $twig,
  38.         ContextProvider $contextProvider,
  39.         GenericPageLoader $pageLoader,
  40.         SeoUrlPlaceholderHandlerInterface $seoUrlPlaceholderHandler,
  41.         TemplateFinderInterface $templateFinder
  42.     ) {
  43.         $this->twig $twig;
  44.         $this->contextProvider $contextProvider;
  45.         $this->pageLoader $pageLoader;
  46.         $this->seoUrlPlaceholderHandler $seoUrlPlaceholderHandler;
  47.         $this->templateFinder $templateFinder;
  48.     }
  49.     public static function getSubscribedEvents(): array
  50.     {
  51.         return [
  52.             KernelEvents::VIEW => 'wrapResponse',
  53.         ];
  54.     }
  55.     public function wrapResponse(ViewEvent $controllerEvent): void
  56.     {
  57.         $request $controllerEvent->getRequest();
  58.         $requestAttributes $request->attributes;
  59.         if (!$requestAttributes->has(RouteLoader::ROUTE_IS_B2B)) {
  60.             return;
  61.         }
  62.         $controllerResult $controllerEvent->getControllerResult();
  63.         if (!$this->isValidB2bControllerResult($controllerResult)) {
  64.             return;
  65.         }
  66.         $controllerResult['controllerName'] = $requestAttributes->get(RouteLoader::ROUTE_CONTROLLER_ROUTE_NAME);
  67.         $controllerResult['controllerAction'] = $requestAttributes->get(RouteLoader::ROUTE_CONTROLLER_ACTION);
  68.         $controllerResult['page'] = $this->pageLoader->load(
  69.             $request,
  70.             $this->contextProvider->getSalesChannelContext()
  71.         );
  72.         $templateName $requestAttributes->get(RouteLoader::ROUTE_TEMPLATE);
  73.         $viewScript $this->templateFinder->find('@SwagB2bPlatform/storefront/frontend/' $templateName '.html.twig');
  74.         $host $requestAttributes->get(RequestTransformer::SALES_CHANNEL_ABSOLUTE_BASE_URL)
  75.             . $requestAttributes->get(RequestTransformer::SALES_CHANNEL_BASE_URL);
  76.         $response = new Response($this->twig->render($viewScript$controllerResult));
  77.         $response->setContent(
  78.             $this->seoUrlPlaceholderHandler->replace(
  79.                 $response->getContent(),
  80.                 $host,
  81.                 $this->contextProvider->getSalesChannelContext()
  82.             )
  83.         );
  84.         $controllerEvent->setResponse($response);
  85.     }
  86.     /**
  87.      * @internal
  88.      */
  89.     protected function isValidB2bControllerResult($controllerResult): bool
  90.     {
  91.         if ($controllerResult === null) {
  92.             return true;
  93.         }
  94.         if (is_array($controllerResult)) {
  95.             return true;
  96.         }
  97.         return false;
  98.     }
  99. }