src/EventSubscriber/PaginationSubscriber.php line 13

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use ApiPlatform\Core\DataProvider\PaginatorInterface;
  4. use ApiPlatform\Core\DataProvider\PartialPaginatorInterface;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  7. use Symfony\Component\HttpKernel\HttpKernelInterface;
  8. use Symfony\Component\HttpKernel\KernelEvents;
  9. final class PaginationSubscriber implements EventSubscriberInterface
  10. {
  11. public function onKernelResponse(ResponseEvent $event): void
  12. {
  13. if (HttpKernelInterface::MAIN_REQUEST !== $event->getRequestType()) {
  14. return;
  15. }
  16. $request = $event->getRequest();
  17. $response = $event->getResponse();
  18. $data = $request->attributes->get('data');
  19. if (!$data instanceof PartialPaginatorInterface) {
  20. return;
  21. }
  22. $currentPage = (int) $data->getCurrentPage();
  23. $response->headers->set('Pagination-Current-Page', $currentPage);
  24. $response->headers->set('Pagination-Items-Per-Page', (int) $data->getItemsPerPage());
  25. if (!$data instanceof PaginatorInterface) {
  26. return;
  27. }
  28. $lastPage = (int) $data->getLastPage();
  29. $response->headers->set('Pagination-Last-Page', $lastPage);
  30. $response->headers->set('Pagination-Total-Items', (int) $data->getTotalItems());
  31. $request = $event->getRequest();
  32. }
  33. public static function getSubscribedEvents(): array
  34. {
  35. return [
  36. KernelEvents::RESPONSE => ['onKernelResponse'],
  37. ];
  38. }
  39. }