src/DataLayer/DataLayerManager.php line 31

Open in your IDE?
  1. <?php
  2. namespace App\DataLayer;
  3. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  4. use Twig\Environment;
  5. class DataLayerManager
  6. {
  7.     public const EVENTS_SESSION_KEY 'datalayer_events';
  8.     public const TEMPLATE 'datalayer/default.html.twig';
  9.     private ?array $events null;
  10.     public function __construct(
  11.         protected readonly SessionInterface $session,
  12.         protected readonly Environment $twig,
  13.     ) {}
  14.     public function addEvent(DataLayerEvent $event): static
  15.     {
  16.         $events $this->getEvents() ?? [];
  17.         $events[] = $event;
  18.         $this->session->set(self::EVENTS_SESSION_KEY$events);
  19.         return $this;
  20.     }
  21.     public function getEvents(): ?array
  22.     {
  23.         return $this->session->get(self::EVENTS_SESSION_KEY, []);
  24.     }
  25.     public function reset(): static
  26.     {
  27.         $this->session->remove(self::EVENTS_SESSION_KEY);
  28.         return $this;
  29.     }
  30.     public function render(): string
  31.     {
  32.         $structuredData = [];
  33.         /** @var DataLayerEvent $event */
  34.         foreach($this->getEvents() as $event) {
  35.             $eventData = [];
  36.             if($event->getName()) {
  37.                 $eventData['event'] = $event->getName();
  38.             }
  39.             foreach($event->getValues() ?? [] as $key => $value) {
  40.                 $eventData[$key] = $value;
  41.             }
  42.             $structuredData[] = $eventData;
  43.         }
  44.         $this->reset();
  45.         return $this->twig->render(self::TEMPLATE, ['data' => $structuredData]);
  46.     }
  47. }