vendor/sulu/sulu/src/Sulu/Bundle/WebsiteBundle/EventListener/SegmentSubscriber.php line 67

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of Sulu.
  4.  *
  5.  * (c) Sulu GmbH
  6.  *
  7.  * This source file is subject to the MIT license that is bundled
  8.  * with this source code in the file LICENSE.
  9.  */
  10. namespace Sulu\Bundle\WebsiteBundle\EventListener;
  11. use Sulu\Component\Webspace\Analyzer\RequestAnalyzerInterface;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\HttpFoundation\Cookie;
  14. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  15. use Symfony\Component\HttpKernel\KernelEvents;
  16. class SegmentSubscriber implements EventSubscriberInterface
  17. {
  18.     /**
  19.      * @var string
  20.      */
  21.     private $segmentHeader;
  22.     /**
  23.      * @var RequestAnalyzerInterface
  24.      */
  25.     private $requestAnalyzer;
  26.     /**
  27.      * @var string
  28.      */
  29.     private $segmentCookieName;
  30.     public function __construct(
  31.         string $segmentHeader,
  32.         RequestAnalyzerInterface $requestAnalyzer,
  33.         string $segmentCookieName
  34.     ) {
  35.         $this->segmentHeader $segmentHeader;
  36.         $this->requestAnalyzer $requestAnalyzer;
  37.         $this->segmentCookieName $segmentCookieName;
  38.     }
  39.     public static function getSubscribedEvents()
  40.     {
  41.         return [
  42.             KernelEvents::RESPONSE => [
  43.                 ['addVaryHeader'],
  44.                 ['addCookieHeader'],
  45.             ],
  46.         ];
  47.     }
  48.     public function addVaryHeader(ResponseEvent $event)
  49.     {
  50.         $response $event->getResponse();
  51.         $webspace $this->requestAnalyzer->getWebspace();
  52.         if ($webspace && \count($webspace->getSegments())) {
  53.             $response->setVary($this->segmentHeaderfalse);
  54.         }
  55.     }
  56.     public function addCookieHeader(ResponseEvent $event)
  57.     {
  58.         $response $event->getResponse();
  59.         $webspace $this->requestAnalyzer->getWebspace();
  60.         $currentSegment $this->requestAnalyzer->getSegment();
  61.         $defaultSegment $webspace $webspace->getDefaultSegment() : null;
  62.         $defaultSegmentKey $defaultSegment $defaultSegment->getKey() : null;
  63.         $currentSegmentKey $currentSegment $currentSegment->getKey() : $defaultSegmentKey;
  64.         $cookieSegmentKey $event->getRequest()->cookies->get($this->segmentCookieName) ?? $defaultSegmentKey;
  65.         if ($currentSegmentKey !== $cookieSegmentKey) {
  66.             $response->headers->setCookie(
  67.                 Cookie::create(
  68.                     $this->segmentCookieName,
  69.                     $defaultSegmentKey === $currentSegmentKey null $currentSegmentKey
  70.                 )
  71.             );
  72.         }
  73.     }
  74. }