src/EventSubscriber/MercureCookieMiddleware.php line 24

  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\User;
  4. use App\Service\CookieGenerator;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  7. use Symfony\Component\HttpKernel\HttpKernelInterface;
  8. use Symfony\Component\HttpKernel\KernelEvents;
  9. use Symfony\Bundle\SecurityBundle\Security;
  10. class MercureCookieMiddleware implements EventSubscriberInterface
  11. {
  12.     public function __construct(private CookieGenerator $generator, private Security $security){}
  13.     public static function getSubscribedEvents(): array
  14.     {
  15.         return [
  16.             KernelEvents::RESPONSE => ['setMercureCookie'],
  17.         ];
  18.     }
  19.     public function setMercureCookie(ResponseEvent $event): void
  20.     {
  21.         $response $event->getResponse();
  22.         $request $event->getRequest();
  23.         if (HttpKernelInterface::MAIN_REQUEST !== $event->getRequestType() ||
  24.             !in_array('text/html'$request->getAcceptableContentTypes()) ||
  25.             !($user $this->security->getUser()) instanceof User
  26.         ) {
  27.             return;
  28.         }
  29.         /** @var User $user */
  30.         $response->headers->setCookie($this->generator->generate($user));
  31.     }
  32. }