vendor/shopware/storefront/Framework/Routing/ResponseHeaderListener.php line 22

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Storefront\Framework\Routing;
  3. use Shopware\Core\Framework\Routing\Annotation\RouteScope;
  4. use Shopware\Core\PlatformRequest;
  5. use Shopware\Storefront\Framework\Routing\Annotation\NoStore;
  6. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  7. class ResponseHeaderListener
  8. {
  9.     private const REMOVAL_HEADERS = [
  10.         PlatformRequest::HEADER_VERSION_ID,
  11.         PlatformRequest::HEADER_LANGUAGE_ID,
  12.         PlatformRequest::HEADER_CONTEXT_TOKEN,
  13.         'Access-Control-Allow-Origin',
  14.         'Access-Control-Allow-Methods',
  15.         'Access-Control-Allow-Headers',
  16.         'Access-Control-Expose-Headers',
  17.     ];
  18.     public function __invoke(ResponseEvent $event): void
  19.     {
  20.         /** @var RouteScope|array $scopes */
  21.         $scopes $event->getRequest()->attributes->get(PlatformRequest::ATTRIBUTE_ROUTE_SCOPE, []);
  22.         if ($scopes instanceof RouteScope) {
  23.             $scopes $scopes->getScopes();
  24.         }
  25.         if (!\in_array(StorefrontRouteScope::ID$scopestrue)) {
  26.             return;
  27.         }
  28.         $this->removeHeaders($event);
  29.         $this->addNoStoreHeader($event);
  30.     }
  31.     private function removeHeaders(ResponseEvent $event): void
  32.     {
  33.         foreach (self::REMOVAL_HEADERS as $headerKey) {
  34.             $event->getResponse()->headers->remove($headerKey);
  35.         }
  36.     }
  37.     private function addNoStoreHeader(ResponseEvent $event): void
  38.     {
  39.         if (!$event->getRequest()->attributes->has('_' NoStore::ALIAS)) {
  40.             return;
  41.         }
  42.         $event->getResponse()->setMaxAge(0);
  43.         $event->getResponse()->headers->addCacheControlDirective('no-cache');
  44.         $event->getResponse()->headers->addCacheControlDirective('no-store');
  45.         $event->getResponse()->headers->addCacheControlDirective('must-revalidate');
  46.         $event->getResponse()->setExpires(new \DateTime('@0'));
  47.     }
  48. }