vendor/knplabs/knp-components/src/Knp/Component/Pager/Event/Subscriber/Paginate/Doctrine/ODM/MongoDB/QuerySubscriber.php line 11

Open in your IDE?
  1. <?php
  2. namespace Knp\Component\Pager\Event\Subscriber\Paginate\Doctrine\ODM\MongoDB;
  3. use Doctrine\ODM\MongoDB\Query\Query;
  4. use Knp\Component\Pager\Event\ItemsEvent;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. class QuerySubscriber implements EventSubscriberInterface
  7. {
  8.     public function items(ItemsEvent $event): void
  9.     {
  10.         if ($event->target instanceof Query) {
  11.             // items
  12.             $type $event->target->getType();
  13.             if ($type !== Query::TYPE_FIND) {
  14.                 throw new \UnexpectedValueException('ODM query must be a FIND type query');
  15.             }
  16.             static $reflectionProperty;
  17.             if (is_null($reflectionProperty)) {
  18.                 $reflectionClass = new \ReflectionClass('Doctrine\ODM\MongoDB\Query\Query');
  19.                 $reflectionProperty $reflectionClass->getProperty('query');
  20.                 $reflectionProperty->setAccessible(true);
  21.             }
  22.             $queryOptions $reflectionProperty->getValue($event->target);
  23.             $resultCount = clone $event->target;
  24.             $queryOptions['type'] = Query::TYPE_COUNT;
  25.             $reflectionProperty->setValue($resultCount$queryOptions);
  26.             $event->count $resultCount->execute();
  27.             $queryOptions $reflectionProperty->getValue($event->target);
  28.             $queryOptions['type'] = Query::TYPE_FIND;
  29.             $queryOptions['limit'] = $event->getLimit();
  30.             $queryOptions['skip'] = $event->getOffset();
  31.             $resultQuery = clone $event->target;
  32.             $reflectionProperty->setValue($resultQuery$queryOptions);
  33.             $cursor $resultQuery->execute();
  34.             $event->items = [];
  35.             // iterator_to_array for GridFS results in 1 item
  36.             foreach ($cursor as $item) {
  37.                 $event->items[] = $item;
  38.             }
  39.             $event->stopPropagation();
  40.         }
  41.     }
  42.     public static function getSubscribedEvents(): array
  43.     {
  44.         return [
  45.             'knp_pager.items' => ['items'0],
  46.         ];
  47.     }
  48. }