/** * * @param LinkFactory $linkFactory * @param RouteHelper $routeHelper * @param HalApiLink $self * @param HalApiLink $parent * @param Paginator $paginator * @param HalApiTransformerContract $transformer * @param string $relation */ public function __construct(LinkFactory $linkFactory, RouteHelper $routeHelper, HalApiLink $self, HalApiLink $parent, Paginator $paginator, HalApiTransformerContract $transformer, $relation) { parent::__construct($linkFactory, $routeHelper, $self, $parent); $route = $self->getRoute(); $routeParameters = array_merge($self->getParameters(), ['per_page' => $paginator->perPage()]); $meta = self::createPaginationMeta($paginator); $items = $paginator->items(); $this->embedFromArray([$relation => $transformer->collection($items)])->meta('pagination', $meta)->link('first', $linkFactory->create($route, array_merge($routeParameters, ['page' => 1]))); $currentPage = $paginator->currentPage(); if ($currentPage > 1) { $prev = $linkFactory->create($route, array_merge($routeParameters, ['page' => $currentPage - 1])); $this->link('prev', $prev); } if ($paginator->hasMorePages()) { $next = $linkFactory->create($route, array_merge($routeParameters, ['page' => $currentPage + 1])); $this->link('next', $next); } if ($paginator instanceof LengthAwarePaginator) { $this->link('last', $linkFactory->create($route, array_merge($routeParameters, ['page' => $paginator->lastPage() ?: 1]))); } }
/** * @inheritdoc */ public function show($model) { /** @var Model $model */ return $this->responseFactory->json($this->transformer->item($model)->build()); }