vendor/knplabs/knp-paginator-bundle/src/Subscriber/SlidingPaginationSubscriber.php line 47

Open in your IDE?
  1. <?php
  2. namespace Knp\Bundle\PaginatorBundle\Subscriber;
  3. use Knp\Bundle\PaginatorBundle\Pagination\SlidingPagination;
  4. use Knp\Component\Pager\Event\PaginationEvent;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpKernel\Event\RequestEvent;
  7. use Symfony\Component\HttpKernel\HttpKernelInterface;
  8. final class SlidingPaginationSubscriber implements EventSubscriberInterface
  9. {
  10.     /** @var string */
  11.     private $route;
  12.     /** @var array<string, mixed> */
  13.     private $params = [];
  14.     /** @var array<string, mixed> */
  15.     private $options;
  16.     /**
  17.      * @param array<string, mixed> $options
  18.      */
  19.     public function __construct(array $options)
  20.     {
  21.         $this->options $options;
  22.     }
  23.     public function onKernelRequest(RequestEvent $event): void
  24.     {
  25.         if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
  26.             return;
  27.         }
  28.         $request $event->getRequest();
  29.         $this->route $request->attributes->get('_route');
  30.         $this->params \array_replace($request->query->all(), $request->attributes->get('_route_params', []));
  31.         foreach ($this->params as $key => $param) {
  32.             if (\strpos($key'_') === 0) {
  33.                 unset($this->params[$key]);
  34.             }
  35.         }
  36.     }
  37.     public function pagination(PaginationEvent $event): void
  38.     {
  39.         // default sort field and order
  40.         $eventOptions $event->options;
  41.         if (isset($eventOptions['defaultSortFieldName']) && !isset($this->params[$eventOptions['sortFieldParameterName']])) {
  42.             $this->params[$eventOptions['sortFieldParameterName']] = $eventOptions['defaultSortFieldName'];
  43.         }
  44.         if (isset($eventOptions['defaultSortDirection']) && !isset($this->params[$eventOptions['sortDirectionParameterName']])) {
  45.             $this->params[$eventOptions['sortDirectionParameterName']] = $eventOptions['defaultSortDirection'];
  46.         }
  47.         // remove default sort params from pagination links
  48.         if (isset($eventOptions['removeDefaultSortParams']) && true === $eventOptions['removeDefaultSortParams']) {
  49.             $defaultSortFieldName $eventOptions['defaultSortFieldName'];
  50.             $sortFieldParameterName $this->params[$eventOptions['sortFieldParameterName']];
  51.             $isFieldEqual $defaultSortFieldName === $sortFieldParameterName;
  52.             $defaultSortDirection $eventOptions['defaultSortDirection'];
  53.             $sortDirectionParameterName $this->params[$eventOptions['sortDirectionParameterName']];
  54.             $isDirectionEqual $defaultSortDirection === $sortDirectionParameterName;
  55.             if (isset($defaultSortFieldName$sortFieldParameterName$defaultSortDirection$sortDirectionParameterName) && $isFieldEqual && $isDirectionEqual) {
  56.                 unset($this->params[$eventOptions['sortFieldParameterName']], $this->params[$eventOptions['sortDirectionParameterName']]);
  57.             }
  58.         }
  59.         $pagination = new SlidingPagination($this->params);
  60.         $pagination->setUsedRoute($this->route);
  61.         $pagination->setTemplate($this->options['defaultPaginationTemplate']);
  62.         $pagination->setSortableTemplate($this->options['defaultSortableTemplate']);
  63.         $pagination->setFiltrationTemplate($this->options['defaultFiltrationTemplate']);
  64.         $pagination->setPageRange($this->options['defaultPageRange']);
  65.         $pagination->setPageLimit($this->options['defaultPageLimit']);
  66.         $event->setPagination($pagination);
  67.         $event->stopPropagation();
  68.     }
  69.     /**
  70.      * @return array<string, array<int, int|string>>
  71.      */
  72.     public static function getSubscribedEvents(): array
  73.     {
  74.         return [
  75.             'knp_pager.pagination' => ['pagination'1],
  76.         ];
  77.     }
  78. }