vendor/sylius/resource-bundle/src/Bundle/Storage/CookieStorage.php line 45
<?php/** This file is part of the Sylius package.** (c) Paweł Jędrzejewski** For the full copyright and license information, please view the LICENSE* file that was distributed with this source code.*/declare(strict_types=1);namespace Sylius\Bundle\ResourceBundle\Storage;use Sylius\Component\Resource\Storage\StorageInterface;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Symfony\Component\HttpFoundation\Cookie;use Symfony\Component\HttpFoundation\ParameterBag;use Symfony\Component\HttpKernel\Event\RequestEvent;use Symfony\Component\HttpKernel\Event\ResponseEvent;use Symfony\Component\HttpKernel\KernelEvents;use Webmozart\Assert\Assert;final class CookieStorage implements StorageInterface, EventSubscriberInterface{private ParameterBag $requestCookies;private ParameterBag $responseCookies;public function __construct(){$this->requestCookies = new ParameterBag();$this->responseCookies = new ParameterBag();}public static function getSubscribedEvents(): array{return [KernelEvents::REQUEST => [['onKernelRequest', 1024]],KernelEvents::RESPONSE => [['onKernelResponse', -1024]],];}public function onKernelRequest(RequestEvent $event): void{if (!$event->isMainRequest()) {return;}$this->requestCookies = new ParameterBag($event->getRequest()->cookies->all());$this->responseCookies = new ParameterBag();}public function onKernelResponse(ResponseEvent $event): void{if (!$event->isMainRequest()) {return;}$response = $event->getResponse();/** @var string|null $value */foreach ($this->responseCookies as $name => $value) {Assert::nullOrString($value);$response->headers->setCookie(new Cookie($name, $value));}$this->requestCookies = new ParameterBag();$this->responseCookies = new ParameterBag();}public function has(string $name): bool{return !in_array($this->get($name), ['', null], true);}public function get(string $name, $default = null){return $this->responseCookies->get($name, $this->requestCookies->get($name, $default));}public function set(string $name, $value): void{$this->responseCookies->set($name, $value);}public function remove(string $name): void{$this->set($name, null);}public function all(): array{return array_merge($this->responseCookies->all(), $this->requestCookies->all());}}