<?php
/**
* Created by Logics Tecnologia e Serviços LTDA.
* @author: Romeu Godoi <romeu@logics.com.br>
* Date: 25/05/20
* Time: 12:07
* @copyright Copyright (C) 2020 LogicSITE. Todos os Direitos Reservados.
* LogicSITE. Este software é de propriedade exclusiva da LOGICS TEC. E SERV. LTDA
* e seu uso só pode ser dado por usuários licenciados por escrito.
* O uso indevido desta plataforma, ou parte dela estará sujeita a penalidades
* previstas em lei, conforme legislação pertinente.
*/
namespace App\EventListener;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Paginator;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
/**
* This Listener adds the X-Total-Count header on response
* Class AddTotalCountHeaderListener
* @package App\EventListener
*/
final class AddTotalCountHeaderListener
{
public function onKernelResponse(ResponseEvent $event): void
{
$request = $event->getRequest();
if (($data = $request->attributes->get('data')) && $data instanceof Paginator) {
// $from = $data->count() ? ($data->getCurrentPage() - 1) * $data->getItemsPerPage() : 0;
// $to = $data->getCurrentPage() < $data->getLastPage() ? $data->getCurrentPage() * $data->getItemsPerPage() : $data->getTotalItems();
$response = $event->getResponse();
$response->headers->add([
'x-current-page' => $data->getCurrentPage(),
'x-items-per-page' => $data->getItemsPerPage(),
'x-last-page' => $data->getLastPage(),
'x-total-count' => $data->getTotalItems(),
// 'accept-ranges' => 'items',
// 'range-unit' => 'items',
// 'content-range' => \sprintf('%u-%u/%u', $from, $to, $data->getTotalItems()),
]);
}
}
}