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

  1. <?php
  2. namespace Knp\Component\Pager\Event\Subscriber\Paginate;
  3. use Knp\Component\Pager\Event\ItemsEvent;
  4. use Solarium\Client;
  5. use Solarium\QueryType\Select\Query\Query;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. /**
  8.  * Solarium query pagination.
  9.  *
  10.  * @author Paweł Jędrzejewski <pjedrzejewski@diweb.pl>
  11.  */
  12. class SolariumQuerySubscriber implements EventSubscriberInterface
  13. {
  14.     public function items(ItemsEvent $event): void
  15.     {
  16.         if (is_array($event->target) && === count($event->target)) {
  17.             $values array_values($event->target);
  18.             [$client$query] = $values;
  19.             if ($client instanceof Client && $query instanceof Query) {
  20.                 $query->setStart($event->getOffset())->setRows($event->getLimit());
  21.                 $solrResult $client->select($query);
  22.                 $event->items  iterator_to_array($solrResult->getIterator());
  23.                 $event->count  $solrResult->getNumFound();
  24.                 $event->setCustomPaginationParameter('result'$solrResult);
  25.                 $event->stopPropagation();
  26.             }
  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. }