<?php
namespace App\EventListener;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Paginator;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
final class AddPaginationHeaders
{
public function addHeaders(ResponseEvent $event): void
{
$request = $event->getRequest();
if (($data = $request->attributes->get('data')) && $data instanceof Paginator && in_array('application/json', $request->getAcceptableContentTypes())) {
$response = $event->getResponse();
if( $data->getTotalItems() > 0 ) {
$headers = [
'x-current-page' => intval($data->getCurrentPage()),
'x-total-items' => intval($data->getTotalItems()),
'x-items-per-page' => intval($data->getItemsPerPage()),
'x-last-page' => intval($data->getLastPage()),
'x-items' => $data->count(),
];
if ( $data->getCurrentPage() < $data->getLastPage() ) {
$headers['x-next-page'] = intval($data->getCurrentPage() + 1);
}
} else {
$headers = [
'x-total-items' => 0,
'x-items' => 0,
];
}
$response->headers->add($headers);
}
}
}