vendor/knplabs/knp-components/src/Knp/Component/Pager/Event/Subscriber/Paginate/ElasticaQuerySubscriber.php line 16

Open in your IDE?
  1. <?php
  2. namespace Knp\Component\Pager\Event\Subscriber\Paginate;
  3. use Elastica\Query;
  4. use Elastica\SearchableInterface;
  5. use Knp\Component\Pager\Event\ItemsEvent;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. /**
  8.  * Elastica query pagination.
  9.  *
  10.  */
  11. class ElasticaQuerySubscriber implements EventSubscriberInterface
  12. {
  13.     public function items(ItemsEvent $event): void
  14.     {
  15.         if (is_array($event->target) && === count($event->target) && reset($event->target) instanceof SearchableInterface && end($event->target) instanceof Query) {
  16.             [$searchable$query] = $event->target;
  17.             $query->setFrom($event->getOffset());
  18.             $query->setSize($event->getLimit());
  19.             $results $searchable->search($query);
  20.             $event->count $results->getTotalHits();
  21.             if ($results->hasAggregations()) {
  22.                 $event->setCustomPaginationParameter('aggregations'$results->getAggregations());
  23.             }
  24.             $event->setCustomPaginationParameter('resultSet'$results);
  25.             $event->items $results->getResults();
  26.             $event->stopPropagation();
  27.         }
  28.     }
  29.     public static function getSubscribedEvents(): array
  30.     {
  31.         return [
  32.             'knp_pager.items' => ['items'0], /* triggers before a standard array subscriber*/
  33.         ];
  34.     }
  35. }