<?php
namespace App\EventListener;
use ApiPlatform\State\Pagination\PaginatorInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class PaginationSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return [
KernelEvents::RESPONSE => ['addPaginationHeaders'],
];
}
public function addPaginationHeaders(ResponseEvent $event): void
{
$method = $event->getRequest()->getMethod();
if ($method !== Request::METHOD_GET) {
return;
}
if (($data = $event->getRequest()->attributes->get('data')) && $data instanceof PaginatorInterface) {
$headers = [
'x-pagination-current' => $data->getCurrentPage(),
'x-pagination-page-size' => $data->getItemsPerPage(),
'x-pagination-total' => $data->getTotalItems(),
];
$responseHeaders = $event->getResponse()->headers;
foreach ($headers as $header => $value) {
$responseHeaders->set($header, $value);
}
}
}
}