Exemplo n.º 1
0
 /**
  * @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);
             }
         }
     }
 }