src/EventListener/PaginationListener.php line 22

  1. <?php
  2. namespace App\EventListener;
  3. use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
  4. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  5. use Symfony\Component\HttpKernel\KernelEvents;
  6. use Symfony\Component\Routing\RouterInterface;
  7. #[AsEventListener(KernelEvents::CONTROLLER)]
  8. class PaginationListener
  9. {
  10.     private const LAST_ROUTE 'last_route';
  11.     public function __construct(
  12.         private readonly RouterInterface $router
  13.     )
  14.     {
  15.     }
  16.     public function __invoke(ControllerEvent $event): void
  17.     {
  18.         if (!isset(($request $event->getRequest())->attributes->get('_route_params')['page'])) {
  19.             return;
  20.         }
  21.         $session $event->getRequest()->getSession();
  22.         $baseRoute $request->attributes->get('_route');
  23.         if (str_contains($baseRoute'api_')) {
  24.             $baseRoute array_key_first($session->get(self::LAST_ROUTE) ?? []);
  25.         }
  26.         $session->set(
  27.             self::LAST_ROUTE,
  28.             [
  29.                 $baseRoute => $this->router->generate(
  30.                     $baseRoute,
  31.                     $request->attributes->get('_route_params')
  32.                 )
  33.             ]
  34.         );
  35.     }
  36. }