EllipseSynergie\ApiResponse\Laravel\Response::withPaginator PHP Method

withPaginator() public method

Respond with a paginator, and a transformer.
public withPaginator ( Illuminate\Contracts\Pagination\LengthAwarePaginator $paginator, callable | League\Fractal\TransformerAbstract $transformer, string $resourceKey = null, array $meta = [] ) : Illuminate\Contracts\Routing\ResponseFactory
$paginator Illuminate\Contracts\Pagination\LengthAwarePaginator
$transformer callable | League\Fractal\TransformerAbstract
$resourceKey string
$meta array
return Illuminate\Contracts\Routing\ResponseFactory
    public function withPaginator(LengthAwarePaginator $paginator, $transformer, $resourceKey = null, $meta = [])
    {
        $queryParams = array_diff_key($_GET, array_flip(['page']));
        $paginator->appends($queryParams);
        $resource = new Collection($paginator->items(), $transformer, $resourceKey);
        $resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
        foreach ($meta as $metaKey => $metaValue) {
            $resource->setMetaValue($metaKey, $metaValue);
        }
        $rootScope = $this->manager->createData($resource);
        return $this->withArray($rootScope->toArray());
    }

Usage Example

 /**
  * Returns a paginated collection
  * 
  * @return \Illuminate\Http\JsonResponse
  */
 public function collection()
 {
     $limit = \Input::get('limit') ?: 10;
     $model = $this->model;
     if (\Request::has('order')) {
         list($orderCol, $orderBy) = explode('|', \Input::get('order'));
         $model = $model->orderBy($orderCol, $orderBy);
     }
     return $this->response->withPaginator($model->paginate($limit), new $this->transformerName(), $this->collectionName);
 }