Viewing file: FractalPresenter.php (4.03 KB) -rw-rw-rw- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php namespace Prettus\Repository\Presenter;
use Exception; use Illuminate\Database\Eloquent\Collection as EloquentCollection; use Illuminate\Pagination\AbstractPaginator; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\Paginator; use League\Fractal\Manager; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection; use League\Fractal\Resource\Item; use League\Fractal\Serializer\SerializerAbstract; use Prettus\Repository\Contracts\PresenterInterface;
/** * Class FractalPresenter * @package Prettus\Repository\Presenter * @author Anderson Andrade <contato@andersonandra.de> */ abstract class FractalPresenter implements PresenterInterface { /** * @var string */ protected $resourceKeyItem = null;
/** * @var string */ protected $resourceKeyCollection = null;
/** * @var \League\Fractal\Manager */ protected $fractal = null;
/** * @var \League\Fractal\Resource\Collection */ protected $resource = null;
/** * @throws Exception */ public function __construct() { if (!class_exists('League\Fractal\Manager')) { throw new Exception(trans('repository::packages.league_fractal_required')); }
$this->fractal = new Manager(); $this->parseIncludes(); $this->setupSerializer(); }
/** * @return $this */ protected function setupSerializer() { $serializer = $this->serializer();
if ($serializer instanceof SerializerAbstract) { $this->fractal->setSerializer(new $serializer()); }
return $this; }
/** * @return $this */ protected function parseIncludes() {
$request = app('Illuminate\Http\Request'); $paramIncludes = config('repository.fractal.params.include', 'include');
if ($request->has($paramIncludes)) { $this->fractal->parseIncludes($request->get($paramIncludes)); }
return $this; }
/** * Get Serializer * * @return SerializerAbstract */ public function serializer() { $serializer = config('repository.fractal.serializer', 'League\\Fractal\\Serializer\\DataArraySerializer');
return new $serializer(); }
/** * Transformer * * @return \League\Fractal\TransformerAbstract */ abstract public function getTransformer();
/** * Prepare data to present * * @param $data * * @return mixed * @throws Exception */ public function present($data) { if (!class_exists('League\Fractal\Manager')) { throw new Exception(trans('repository::packages.league_fractal_required')); }
if ($data instanceof EloquentCollection) { $this->resource = $this->transformCollection($data); } elseif ($data instanceof AbstractPaginator) { $this->resource = $this->transformPaginator($data); } else { $this->resource = $this->transformItem($data); }
return $this->fractal->createData($this->resource)->toArray(); }
/** * @param $data * * @return Item */ protected function transformItem($data) { return new Item($data, $this->getTransformer(), $this->resourceKeyItem); }
/** * @param $data * * @return \League\Fractal\Resource\Collection */ protected function transformCollection($data) { return new Collection($data, $this->getTransformer(), $this->resourceKeyCollection); }
/** * @param AbstractPaginator|LengthAwarePaginator|Paginator $paginator * * @return \League\Fractal\Resource\Collection */ protected function transformPaginator($paginator) { $collection = $paginator->getCollection(); $resource = new Collection($collection, $this->getTransformer(), $this->resourceKeyCollection); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return $resource; } }
|