private function injectNextLink(Collection $halCollection)
 {
     $page = $halCollection->getPage();
     $pageCount = $halCollection->getCollection()->count();
     $next = $page < $pageCount ? $page + 1 : false;
     if ($next) {
         $link = $this->createPaginationLink('next', $halCollection, $next);
         $halCollection->getLinks()->add($link);
     }
 }
Example #2
0
 public function testPageIsMutable()
 {
     $hal = new Collection(array(), 'item/route');
     $hal->setPage(5);
     $this->assertEquals(5, $hal->getPage());
 }
Example #3
0
 /**
  * Generate HAL links for a paginated collection
  *
  * @param  Collection $halCollection
  * @return boolean
  */
 protected function injectPaginationLinks(Collection $halCollection)
 {
     $collection = $halCollection->getCollection();
     $page = $halCollection->getPage();
     $pageSize = $halCollection->getPageSize();
     $route = $halCollection->getCollectionRoute();
     $params = $halCollection->getCollectionRouteParams();
     $options = $halCollection->getCollectionRouteOptions();
     $collection->setItemCountPerPage($pageSize);
     $collection->setCurrentPageNumber($page);
     $count = count($collection);
     if (!$count) {
         return true;
     }
     if ($page < 1 || $page > $count) {
         return new ApiProblem(409, 'Invalid page provided');
     }
     $links = $halCollection->getLinks();
     $next = $page < $count ? $page + 1 : false;
     $prev = $page > 1 ? $page - 1 : false;
     // self link
     $link = new Link('self');
     $link->setRoute($route);
     $link->setRouteParams($params);
     $link->setRouteOptions(ArrayUtils::merge($options, ['query' => ['page' => $page]]));
     $links->add($link, true);
     // first link
     $link = new Link('first');
     $link->setRoute($route);
     $link->setRouteParams($params);
     $link->setRouteOptions(ArrayUtils::merge($options, ['query' => ['page' => null]]));
     $links->add($link);
     // last link
     $link = new Link('last');
     $link->setRoute($route);
     $link->setRouteParams($params);
     $link->setRouteOptions(ArrayUtils::merge($options, ['query' => ['page' => $count]]));
     $links->add($link);
     // prev link
     if ($prev) {
         $link = new Link('prev');
         $link->setRoute($route);
         $link->setRouteParams($params);
         $link->setRouteOptions(ArrayUtils::merge($options, ['query' => ['page' => $prev]]));
         $links->add($link);
     }
     // next link
     if ($next) {
         $link = new Link('next');
         $link->setRoute($route);
         $link->setRouteParams($params);
         $link->setRouteOptions(ArrayUtils::merge($options, ['query' => ['page' => $next]]));
         $links->add($link);
     }
     return true;
 }