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

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.     private $route;
  11.     private $params = [];
  12.     private $options;
  13.     public function __construct(array $options)
  14.     {
  15.         $this->options $options;
  16.     }
  17.     public function onKernelRequest(RequestEvent $event): void
  18.     {
  19.         if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
  20.             return;
  21.         }
  22.         $request $event->getRequest();
  23.         $this->route $request->attributes->get('_route');
  24.         $this->params = \array_replace($request->query->all(), $request->attributes->get('_route_params', []));
  25.         foreach ($this->params as $key => $param) {
  26.             if ('_' == \substr($key01)) {
  27.                 unset($this->params[$key]);
  28.             }
  29.         }
  30.     }
  31.     public function pagination(PaginationEvent $event): void
  32.     {
  33.         // default sort field and order
  34.         $eventOptions $event->options;
  35.         if (isset($eventOptions['defaultSortFieldName']) && !isset($this->params[$eventOptions['sortFieldParameterName']])) {
  36.             $this->params[$eventOptions['sortFieldParameterName']] = $eventOptions['defaultSortFieldName'];
  37.         }
  38.         if (isset($eventOptions['defaultSortDirection']) && !isset($this->params[$eventOptions['sortDirectionParameterName']])) {
  39.             $this->params[$eventOptions['sortDirectionParameterName']] = $eventOptions['defaultSortDirection'];
  40.         }
  41.         // remove default sort params from pagination links
  42.         if (isset($eventOptions['removeDefaultSortParams']) && true === $eventOptions['removeDefaultSortParams']) {
  43.             $defaultSortFieldName $eventOptions['defaultSortFieldName'];
  44.             $sortFieldParameterName $this->params[$eventOptions['sortFieldParameterName']];
  45.             $isFieldEqual $defaultSortFieldName === $sortFieldParameterName;
  46.             $defaultSortDirection $eventOptions['defaultSortDirection'];
  47.             $sortDirectionParameterName $this->params[$eventOptions['sortDirectionParameterName']];
  48.             $isDirectionEqual $defaultSortDirection === $sortDirectionParameterName;
  49.             if (isset($defaultSortFieldName) && isset($sortFieldParameterName) && $isFieldEqual
  50.                 && isset($defaultSortDirection) && isset($sortDirectionParameterName) && $isDirectionEqual) {
  51.                 unset($this->params[$eventOptions['sortFieldParameterName']]);
  52.                 unset($this->params[$eventOptions['sortDirectionParameterName']]);
  53.             }
  54.         }
  55.         $pagination = new SlidingPagination($this->params);
  56.         $pagination->setUsedRoute($this->route);
  57.         $pagination->setTemplate($this->options['defaultPaginationTemplate']);
  58.         $pagination->setSortableTemplate($this->options['defaultSortableTemplate']);
  59.         $pagination->setFiltrationTemplate($this->options['defaultFiltrationTemplate']);
  60.         $pagination->setPageRange($this->options['defaultPageRange']);
  61.         $pagination->setPageLimit($this->options['defaultPageLimit']);
  62.         $event->setPagination($pagination);
  63.         $event->stopPropagation();
  64.     }
  65.     public static function getSubscribedEvents(): array
  66.     {
  67.         return [
  68.             'knp_pager.pagination' => ['pagination'1],
  69.         ];
  70.     }
  71. }