src/Service/PagerService.php line 38

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. use Doctrine\ORM\Query;
  4. use Knp\Component\Pager\Pagination\PaginationInterface;
  5. use Knp\Component\Pager\PaginatorInterface;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\OptionsResolver\OptionsResolver;
  8. class PagerService
  9. {
  10.     const LIMIT_PER_PAGE 10;
  11.     const LIMIT_ALLOWED_MAX 100;
  12.     /**
  13.      * @var PaginatorInterface
  14.      */
  15.     protected $paginator;
  16.     public function __construct(PaginatorInterface $paginator)
  17.     {
  18.         $this->paginator $paginator;
  19.     }
  20.     /**
  21.      * @param Query $query
  22.      * @param bool $options
  23.      * @return PaginationInterface
  24.      */
  25.     public function paginate(Query $query$options false)
  26.     {
  27.         if (!$options) {
  28.             $options $this->getPaginationOptions();
  29.         }
  30.         return $this->paginator->paginate($query$options['page'], $options['limit']);
  31.     }
  32.     /**
  33.      * @param array $defaults
  34.      * @return array
  35.      */
  36.     public function getPaginationOptions($defaults = [])
  37.     {
  38.         $request Request::createFromGlobals();
  39.         $optionsResolver = new OptionsResolver();
  40.         $optionsResolver->setDefaults([
  41.             'page' => 1,
  42.             'limit' => self::LIMIT_PER_PAGE,
  43.         ]);
  44.         $defaults $optionsResolver->resolve($defaults);
  45.         $max  $request->query->getInt('limit'$defaults['limit']);
  46.         $max $max self::LIMIT_ALLOWED_MAX self::LIMIT_ALLOWED_MAX $max;
  47.         return [
  48.             'page' => $request->query->getInt('page'$defaults['page']),
  49.             'limit' => $max,
  50.         ];
  51.     }
  52. }