/** * @param mixed $value * * @return string */ public function serialize($value) { $request = RequestFactory::create(); $this->filterOutResourceFields($request); $this->filterOutIncludedResources($request); return parent::serialize($value); }
public function testItWillReturnARequestInstanceOnly() { $_SERVER = ['REQUEST_METHOD' => 'GET', 'HTTP_HOST' => 'nilportugues.com', 'REQUEST_TIME' => time()]; $request1 = RequestFactory::create(); $request2 = RequestFactory::create(); $this->assertTrue($request1 === $request2); }
/** * Override the default index function to get many resources. * @property int filters['improvedId'] * @property int filters['preservedId'] * @return \Symfony\Component\HttpFoundation\Response */ public function index() { $apiRequest = RequestFactory::create(); $page = $apiRequest->getPage(); if (!$page->size()) { $page->setSize($this->pageSize); } $fields = $apiRequest->getFields(); $sorting = $apiRequest->getSort(); $included = $apiRequest->getIncludedRelationships(); $filters = $apiRequest->getFilters(); $resource = new ListResource($this->serializer, $page, $fields, $sorting, $included, $filters); if ($filters == NULL) { $totalAmount = $this->totalAmountResourceCallable(); $results = $this->listResourceCallable(); $controllerAction = '\\' . get_called_class() . '@index'; $uri = $this->uriGenerator($controllerAction); return $this->addHeaders($resource->get($totalAmount, $results, $uri, get_class($this->getDataModel()))); } else { $improvedId = $filters['improvedParam']; $preservedId = $filters['preservedParam']; $totalAmount = function () use($improvedId, $preservedId) { $id = (new Solution())->getKeyName(); return Solution::query()->where(['improvedParam' => $improvedId, 'preservedParam' => $preservedId])->get([$id])->count(); }; $results = function () use($improvedId, $preservedId) { return EloquentHelper::paginate($this->serializer, Solution::query()->where(['improvedParam' => $improvedId, 'preservedParam' => $preservedId]))->get(); }; $params = array('improvedParam' => $improvedId, 'preservedParam' => $preservedId); $queryString = http_build_query($params); $controllerAction = '\\' . get_called_class() . '@index'; $uri = $this->uriGenerator($controllerAction); return $resource->get($totalAmount, $results, $uri, Solution::class); } }
/** * Get single resource. * * @param $id * * @return \Symfony\Component\HttpFoundation\Response */ public function show($id) { $apiRequest = RequestFactory::create(); $resource = new GetResource($this->serializer, $apiRequest->getFields(), $apiRequest->getIncludedRelationships()); $find = $this->findResourceCallable($id); return $this->addHeaders($resource->get($id, get_class($this->getDataModel()), $find)); }
/** * @param JsonApiSerializer $serializer * @param Builder $builder * @param Model $model * * @return Builder */ protected static function sort(JsonApiSerializer $serializer, Builder $builder, Model $model) { $mapping = $serializer->getTransformer()->getMappingByClassName(get_class($model)); $sorts = RequestFactory::create()->getSortDirection(); if (!empty($sorts)) { $aliased = $mapping->getAliasedProperties(); $sortsFields = str_replace(array_values($aliased), array_keys($aliased), array_keys($sorts)); $sorts = array_combine($sortsFields, array_values($sorts)); foreach ($sorts as $field => $direction) { $builder->orderBy($field, $direction === 'ascending' ? 'ASC' : 'DESC'); } } return $builder; }
/** * @param Request $request * * @return \Symfony\Component\HttpFoundation\Response */ public function getAuthorByBook(Request $request) { $apiRequest = RequestFactory::create(); $page = $apiRequest->getPage(); if (!$page->size()) { $page->setSize(10); //Default elements per page } $resource = new ListResource($this->serializer, $page, $apiRequest->getFields(), $apiRequest->getSort(), $apiRequest->getIncludedRelationships(), $apiRequest->getFilters()); $totalAmount = function () use($request) { $id = (new Author())->getKeyName(); return Author::query()->where('id', '=', $request->author_id)->get([$id])->count(); }; $results = function () use($request) { return EloquentHelper::paginate($this->serializer, Author::query()->where('id', '=', $request->author_id))->get(); }; $uri = route('api.authors.show', ['id' => $request->author_id]); return $resource->get($totalAmount, $results, $uri, Author::class); }
/** * @param $id * * @return \Symfony\Component\HttpFoundation\Response */ public function getOrdersByEmployee($id) { $apiRequest = RequestFactory::create(); $page = $apiRequest->getPage(); if (!$page->size()) { $page->setSize($this->pageSize); } $fields = $apiRequest->getFields(); $sorting = $apiRequest->getSort(); $included = $apiRequest->getIncludedRelationships(); $filters = $apiRequest->getFilters(); $resource = new ListResource($this->serializer, $page, $fields, $sorting, $included, $filters); $totalAmount = function () use($id) { $idKey = (new Orders())->getKeyName(); return Orders::query()->where('employee_id', '=', $id)->get([$idKey])->count(); }; $results = function () use($id) { return EloquentHelper::paginate($this->serializer, Orders::query()->where('employee_id', '=', $id))->get(); }; $uri = route('employees.orders', ['employee_id' => $id]); return $resource->get($totalAmount, $results, $uri, Orders::class); }