src/EventListener/PaginationListener.php line 22
<?php
namespace App\EventListener;
use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Routing\RouterInterface;
#[AsEventListener(KernelEvents::CONTROLLER)]
class PaginationListener
{
private const LAST_ROUTE = 'last_route';
public function __construct(
private readonly RouterInterface $router
)
{
}
public function __invoke(ControllerEvent $event): void
{
if (!isset(($request = $event->getRequest())->attributes->get('_route_params')['page'])) {
return;
}
$session = $event->getRequest()->getSession();
$baseRoute = $request->attributes->get('_route');
if (str_contains($baseRoute, 'api_')) {
$baseRoute = array_key_first($session->get(self::LAST_ROUTE) ?? []);
}
$session->set(
self::LAST_ROUTE,
[
$baseRoute => $this->router->generate(
$baseRoute,
$request->attributes->get('_route_params')
)
]
);
}
}