/** * Construct a pagerfanta representation from the current request * * @param AdapterInterface $adapter - The adapter to use * @return QueryablePaginatedRepresentation */ protected function getPagerfantaRepresentation(Request $request, AdapterInterface $adapter) { $pagerfanta = new Pagerfanta($adapter); $limit = $request->query->get('limit'); $zeroLimit = false; if (!$limit && ($limit === 0 || $limit === '0')) { $limit = $pagerfanta->count(); $zeroLimit = true; } if (!$limit) { $limit = 10; } $pagerfanta->setMaxPerPage($limit); $page = $request->query->get('page'); $nbPages = $pagerfanta->getNbPages(); if (!$page) { $page = 1; } // Avoid errors: redirect to max page if ($page > $nbPages) { $page = $nbPages; } $pagerfanta->setCurrentPage($page); $route = new Route($request->get('_route'), $request->attributes->get('_route_params'), false); return new QueryablePaginatedRepresentation(new CollectionRepresentation($pagerfanta->getCurrentPageResults()), $route->getName(), $route->getParameters(), $pagerfanta->getCurrentPage(), $zeroLimit ? 0 : $pagerfanta->getMaxPerPage(), $nbPages, $pagerfanta->count(), null, null, $route->isAbsolute(), $request->query->get('where'), $request->query->get('search'), $request->query->get('order'), null, null, null); }
/** * @param Request $request * @param AdapterInterface $adapter * @param string|null $route * * @return PaginatedRepresentation */ protected function paginate(Request $request, AdapterInterface $adapter, $route = null, $routeParameters = null) { $pagerfanta = new Pagerfanta($adapter); $pagerfanta->setMaxPerPage($request->query->get(self::LIMIT_PARAMETER, 5)); $pagerfanta->setCurrentPage($request->query->get(self::PAGE_PARAMETER, 1)); $collection = new CollectionRepresentation($pagerfanta->getCurrentPageResults()); $paginated = new PaginatedRepresentation($collection, $route ?? $request->get('_route'), $routeParameters ?? $request->attributes->get('_route_params'), $pagerfanta->getCurrentPage(), $pagerfanta->getMaxPerPage(), $pagerfanta->getNbPages(), self::PAGE_PARAMETER, self::LIMIT_PARAMETER, false, $pagerfanta->count()); return $paginated; }
public function serializePagerfantaToJson(JsonSerializationVisitor $visitor, Pagerfanta $pagerfanta, array $type, Context $context) { $type['name'] = 'array'; return ['items' => $visitor->visitArray((array) $pagerfanta->getCurrentPageResults(), $type, $context), 'pages_count' => $pagerfanta->getNbPages(), 'current_page' => $pagerfanta->getCurrentPage(), 'max_per_page' => $pagerfanta->getMaxPerPage(), 'items_count' => $pagerfanta->count()]; }
/** * Get the total number of results. * * @return int */ public function getTotal() : int { return $this->paginator->count(); }
public function testCountShouldReturnNbResults() { $this->setAdapterNbResultsAny(30); $this->assertSame(30, $this->pagerfanta->count()); }