/** * @param Pagerfanta $pager The pager * @param Route $route The collection's route * @param mixed $inline Most of the time, a custom `CollectionRepresentation` instance * * @return PaginatedRepresentation */ public function createRepresentation(Pagerfanta $pager, Route $route, $inline = null) { if (null === $inline) { $inline = new CollectionRepresentation($pager->getCurrentPageResults()); } return new PaginatedRepresentation($inline, $route->getName(), $route->getParameters(), $pager->getCurrentPage(), $pager->getMaxPerPage(), $pager->getNbPages(), $this->getPageParameterName(), $this->getLimitParameterName(), $route->isAbsolute(), $pager->getNbResults()); }
/** * @param SlidingPagination $slidingPagination * @param Route $route * @param null $inline * @return PaginatedRepresentation */ public function createRepresentation(SlidingPagination $slidingPagination, Route $route, $inline = null) { if (null === $inline) { $inline = new CollectionRepresentation($slidingPagination->getItems()); } return new PaginatedRepresentation($inline, $route->getName(), $route->getParameters(), $slidingPagination->getCurrentPageNumber(), $slidingPagination->getItemNumberPerPage(), $slidingPagination->getPaginationData()['pageCount'], $this->getPageParameterName(), $this->getLimitParameterName(), $route->isAbsolute(), $slidingPagination->getTotalItemCount()); }
private function patchAbsolute(Relation $relation, $absolute) { $href = $relation->getHref(); if ($href instanceof Route) { $href = new Route($href->getName(), $href->getParameters(), $absolute, $href->getGenerator()); } return new Relation($relation->getName(), $href, $relation->getEmbed(), $relation->getAttributes(), $relation->getExclusion()); }
private function createHref($href, $name) { if (isset($href->attributes('')->uri) && isset($href->attributes('')->route)) { throw new \RuntimeException(sprintf('uri and route attributes are mutually exclusive, please set only one of them. The problematic relation rel is %s.', $name)); } elseif (isset($href->attributes('')->uri)) { $href = (string) $href->attributes('')->uri; } else { $parameters = array(); foreach ($href->parameter as $parameter) { $parameters[(string) $parameter->attributes('')->name] = (string) $parameter->attributes('')->value; } $href = new Route((string) $href->attributes('')->route, $parameters, null !== ($absolute = $href->attributes('')->absolute) ? 'true' === strtolower($absolute) : false, isset($href->attributes('')->generator) ? (string) $href->attributes('')->generator : null); } return $href; }
/** * @param AbstractPagination $pagination * @param Request $request * @param string $collectionName * * @return PaginatedRepresentation */ public function createRepresentation(AbstractPagination $pagination, Request $request, $collectionName = '_items') { $route = new Route($request->get('_route', 'homepage'), $request->get('_route_params', $request->query->all())); $routeParameters = is_array($route->getParameters()) ? $route->getParameters() : []; $numberOfPages = 1; if ($pagination->getTotalItemCount() > 0 && $pagination->getItemNumberPerPage() > 0) { $numberOfPages = intval(ceil($pagination->getTotalItemCount() / $pagination->getItemNumberPerPage())); } $items = $pagination->getItems(); switch (true) { case $items instanceof ArrayCollection: $items = $items->toArray(); break; case $items instanceof \ArrayObject: $items = $items->getArrayCopy(); break; } return new PaginatedRepresentation(new CollectionRepresentation(array_values($items), $collectionName), $route->getName(), $routeParameters, $pagination->getCurrentPageNumber(), $pagination->getItemNumberPerPage(), $numberOfPages, $this->getPageParameterName(), $this->getLimitParameterName(), $route->isAbsolute(), $pagination->getTotalItemCount()); }
/** * 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); }