Skip to content

Latest commit

 

History

History
162 lines (124 loc) · 3.28 KB

default-order.md

File metadata and controls

162 lines (124 loc) · 3.28 KB

Overriding Default Order

API Platform provides an easy way to override the default order of items in your collection.

By default, items in the collection are ordered in ascending (ASC) order by their resource identifier(s). If you want to customize this order, you must add an order attribute on your ApiResource annotation:

<?php
// api/src/ApiResource/Book.php with Symfony or app/ApiResource/Book.php with Laravel
namespace App\ApiResource;

use ApiPlatform\Metadata\ApiResource;

#[ApiResource(order: ['foo' => 'ASC'])]
class Book
{
    // ...

    /**
     * ...
     */
    public $foo;

    // ...
}
# api/config/api_platform/resources/Book.yaml
# The YAML syntax is only supported for Symfony
App\ApiResource\Book:
  order:
    foo: ASC

This order attribute is used as an array: the key defines the order field, the values defines the direction. If you only specify the key, ASC direction will be used as default. For example, to order by foo & bar:

<?php
// api/src/ApiResource/Book.php with Symfony or app/ApiResource/Book.php with Laravel
namespace App\ApiResource;

use ApiPlatform\Metadata\ApiResource;

#[ApiResource(order: ['foo', 'bar'])]
class Book
{
    // ...

    /**
     * ...
     */
    public $foo;

    /**
     * ...
     */
    public $bar;

    // ...
}
# api/config/api_platform/resources/Book.yaml
# The YAML syntax is only supported for Symfony
App\ApiResource\Book:
  order: ['foo', 'bar']

It's also possible to configure the default order on an association property:

<?php
// api/src/ApiResource/Book.php with Symfony or app/ApiResource/Book.php with Laravel
namespace App\ApiResource;

use ApiPlatform\Metadata\ApiResource;

#[ApiResource(order: ['author.username'])]
class Book
{
    // ...

    /**
     * @var User
     */
    public $author;

    // ...
}
# api/config/api_platform/resources/Book.yaml
# The YAML syntax is only supported for Symfony
App\ApiResource\Book:
  order: ['author.username']

Another possibility is to apply the default order for a specific collection operation, which will override the global default order configuration.

<?php
// api/src/ApiResource/Book.php with Symfony or app/ApiResource/Book.php with Laravel
namespace App\ApiResource;

use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\ApiResource;

#[ApiResource(operations: [
    new GetCollection(),
    new GetCollection(name: 'get_desc_custom', uriTemplate: 'custom_collection_desc_foos', order: ['name' => 'DESC'])],
    new GetCollection(name: 'get_asc_custom', uriTemplate: 'custom_collection_asc_foos', order: ['name' => 'ASC'])]
])]
class Book
{
    // ...

    /**
     * @var string
     */
    public $name;

    // ...
}
# api/config/api_platform/resources/Book.yaml
# The YAML syntax is only supported for Symfony
App\ApiResource\Book:
  ApiPlatform\Metadata\GetCollection: ~
  get_desc_custom:
    class: ApiPlatform\Metadata\GetCollection
    uriTemplate: custom_collection_desc_foos
    order:
      name: DESC
  get_asc_custom:
    class: ApiPlatform\Metadata\GetCollection
    uriTemplate: custom_collection_asc_foos
    order:
      name: ASC