/** * @return \NilPortugues\Api\JsonApi\Http\Request\Parameters\Sorting */ public function getSort() { $sort = $this->getQueryParam('sort'); $sorting = new Sorting(); if (!empty($sort) && is_string($sort)) { $members = \explode(',', $sort); if (!empty($members)) { foreach ($members as $field) { $key = ltrim($field, '-'); $sorting->addField($key, '-' === $field[0] ? 'descending' : 'ascending'); } } } return $sorting; }
public function testIsEmpty() { $this->assertFalse($this->sorting->isEmpty()); }
public function testItCanAssertAndThrowExceptionForInvalidSortParams() { $fields = new Fields(); $included = new Included(); $sorting = new Sorting(); $errorBag = new ErrorBag(); $hasError = false; try { $sorting->addField('superhero', 'ascending'); QueryObject::assert($this->serializer, $fields, $included, $sorting, $errorBag, Post::class); } catch (QueryException $e) { $hasError = true; } $this->assertTrue($hasError); }
/** * Build the URL. * * @param string $route * @param int $pageNumber * @param int $pageSize * @param Fields $fields * @param Sorting $sorting * @param Included $included * @param array $filters * * @return string */ protected function pagePaginatedRoute($route, $pageNumber, $pageSize, Fields $fields, Sorting $sorting, Included $included, $filters) { $fieldKeys = []; if (false === $fields->isEmpty()) { $fieldKeys = $fields->get(); foreach ($fieldKeys as &$v) { $v = implode(',', $v); } } $queryParams = urldecode(http_build_query(array_filter(['page' => array_filter(['number' => $pageNumber, 'size' => $pageSize]), 'fields' => $fieldKeys, 'filter' => $filters, 'sort' => $sorting->get(), 'include' => $included->get()]))); $expression = $route[strlen($route) - 1] === '?' || $route[strlen($route) - 1] === '&' ? '%s%s' : '%s?%s'; return sprintf($expression, $route, $queryParams); }
/** * @param JsonApiSerializer $serializer * @param string $className * @param Sorting $sorting * @param ErrorBag $errorBag */ protected static function validateSortParams(JsonApiSerializer $serializer, $className, Sorting $sorting, ErrorBag $errorBag) { if (false === $sorting->isEmpty()) { if ($mapping = $serializer->getTransformer()->getMappingByClassName($className)) { $aliased = (array) $mapping->getAliasedProperties(); $sortsFields = str_replace(array_values($aliased), array_keys($aliased), $sorting->fields()); $invalidProperties = array_diff($sortsFields, $mapping->getProperties()); foreach ($invalidProperties as $extraField) { $errorBag[] = new InvalidSortError($extraField); } } } }