<?php
namespace App\ElasticSearch\EventSubscriber;
use App\ElasticSearch\Service\ElasticSearchService;
use Knp\Component\Pager\Event\ItemsEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class PaginatorSubscriber implements EventSubscriberInterface
{
public function __construct(protected ElasticSearchService $elasticSearch)
{
}
public function items(ItemsEvent $event): void
{
if (!is_array($event->target) || !array_key_exists('query', $event->target)) {
return;
}
$page = ($event->getOffset() / $event->getLimit() + 1);
$result = $this->elasticSearch->search($event->target['query'], $page, 10);
$event->count = $result['meta']['hitCount'];
$event->items = $result['hits'];
$event->stopPropagation();
}
public static function getSubscribedEvents(): array
{
return [
'knp_pager.items' => ['items', 1],
];
}
}