<?php
namespace App\EventSubscriber;
use ApiPlatform\Core\DataProvider\PaginatorInterface;
use ApiPlatform\Core\DataProvider\PartialPaginatorInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\KernelEvents;
final class PaginationSubscriber implements EventSubscriberInterface
{
public function onKernelResponse(ResponseEvent $event): void
{
if (HttpKernelInterface::MAIN_REQUEST !== $event->getRequestType()) {
return;
}
$request = $event->getRequest();
$response = $event->getResponse();
$data = $request->attributes->get('data');
if (!$data instanceof PartialPaginatorInterface) {
return;
}
$currentPage = (int) $data->getCurrentPage();
$response->headers->set('Pagination-Current-Page', $currentPage);
$response->headers->set('Pagination-Items-Per-Page', (int) $data->getItemsPerPage());
if (!$data instanceof PaginatorInterface) {
return;
}
$lastPage = (int) $data->getLastPage();
$response->headers->set('Pagination-Last-Page', $lastPage);
$response->headers->set('Pagination-Total-Items', (int) $data->getTotalItems());
$request = $event->getRequest();
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::RESPONSE => ['onKernelResponse'],
];
}
}