src/EventSubscriber/PaginateDirectorySubscriber.php line 11

  1. <?php
  2. namespace App\EventSubscriber;
  3. use Knp\Component\Pager\Event\ItemsEvent;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\Finder\Finder;
  6. final class PaginateDirectorySubscriber implements EventSubscriberInterface
  7. {
  8.     public function items(ItemsEvent $event): void
  9.     {
  10.         if (!is_string($event->target) || !is_dir($event->target)) {
  11.             return;
  12.         }
  13.         $finder = new Finder();
  14.         $finder
  15.             ->files()
  16.             ->depth('< 4'// 3 levels
  17.             ->in($event->target)
  18.         ;
  19.         $iterator $finder->getIterator();
  20.         $files iterator_to_array($iterator);
  21.         $event->count count($files);
  22.         $event->items array_slice($files$event->getOffset(), $event->getLimit());
  23.         $event->stopPropagation();
  24.     }
  25.     public static function getSubscribedEvents(): array
  26.     {
  27.         return [
  28.             'knp_pager.items' => ['items'1/* increased priority to override any internal */]
  29.         ];
  30.     }
  31. }