Collection Component

Table of contents

Overview

The following configuration can be used to explicitly disable or enable the collection resource. By default it is enabled.

silverback_api_components:
  enabled_components:
    collection: true  # default

The Collection resource is designed to be a proxy which will output another resource’s collection in it’s Collection::$collection property. For many websites, you will want to output a list of another resource (for example a list of articles). This makes it much easier by reading the collection within the component and allows you to configure a default number of items to display per page and query string parameters that you would also be able to use in your front-end application to filter resources.

Usage

Input

Endpoint /component/collection. Example POST

{
    "resourceIri": "/component/dummy_components",
    "defaultQueryParameters": {
      "search": "something",
      "orderBy": "anotherThing"
    },
    "perPage": 3
}

Output

Here is an example output

{
    "@context": "/contexts/Collection",
    "@id": "/component/collections/46419a6ef41a492f95cc2b18ae697fbb",
    "@type": "Collection",
    "componentLocations": [],
    "componentGroups": [],
    "resourceIri": "/component/dummy_components",
    "perPage": 3,
    "defaultQueryParameters": {
        "search": "something",
        "orderBy": "anotherThing"
    },
    "collection": {
        "@id": "/component/dummy_components",
        "@type": "hydra:Collection",
        "hydra:member": [
            {
                "@id": "/component/dummy_components/0830edc89f454579b9007cab7f017989",
                "@type": "DummyComponent",
                "componentLocations": [],
                "uiComponent": null,
                "uiClassNames": null,
                "componentGroups": [],
                "_metadata": {
                    "persisted": true
                }
            },
            {
                "@id": "/component/dummy_components/09ff183046834f62a77c694b4bf8de1d",
                "@type": "DummyComponent",
                "componentLocations": [],
                "uiComponent": null,
                "uiClassNames": null,
                "componentGroups": [],
                "_metadata": {
                    "persisted": true
                }
            },
            {
                "@id": "/component/dummy_components/0b0201f92dca46e0981e02231eb3da9e",
                "@type": "DummyComponent",
                "componentLocations": [],
                "uiComponent": null,
                "uiClassNames": null,
                "componentGroups": [],
                "_metadata": {
                    "persisted": true
                }
            }
        ],
        "hydra:totalItems": 50,
        "hydra:view": {
            "@id": "/component/dummy_components?page=1",
            "@type": "hydra:PartialCollectionView",
            "hydra:first": "/component/dummy_components?page=1",
            "hydra:last": "/component/dummy_components?page=17",
            "hydra:next": "/component/dummy_components?page=2"
        }
    },
    "_metadata": {
        "persisted": true
    }
} 

Fields

resourceIri (required)

The IRI of the API resource that you would like the component to list

defaultQueryParameters

Populate this with key/value pairs of what you would usually add into your querystring when requesting the IRI directly.

perPage

This parameter can be configured whether or not you have enabled client_items_per_page in API Platform. This is because you may want to list the first x resources returned on a given page. Perhaps on the home page, if you’ve ordered your collection by createdAt, you could list the most recent 3 blog articles.

IMPORTANT! Only use this if client_items_per_page is not enabled and your front-end application does not need to reload this collection without reloading this resource. Alternatively enable client_items_per_page, maximum_items_per_page and then set defaultQueryParameters on the Collection resource.


Copyright © 2018-2020 Silverback IS. Distributed by an MIT license.