CakePHP 3 plugin that injects pagination information into API responses.

CakePHP 3 plugin that injects pagination information into API responses.

README

Latest Version on Packagist
Software License
Build Status
Coverage Status
Quality Score
Total Downloads

This is a simple component for CakePHP 3 which injects pagination information
from CakePHP’s Paginator into serialized JsonView and XmlView responses.

Install

Via Composer

$ composer require bcrowe/cakephp-api-pagination

Load the plugin in your application’s bootstrap.php file:

Plugin::load('BryanCrowe/ApiPagination');

Usage

Make sure your application has been set up to use data views; see the
Enabling Data Views in Your Application section of the CakePHP
documentation.

Then, load ApiPaginationComponent:

$this->loadComponent('BryanCrowe/ApiPagination.ApiPagination');

Then, go ahead and set your paginated view variable like so:

$this->set('articles', $this->paginate($this->Articles));
$this->set('_serialize', ['articles']);

Note: It is important that your _serialize variable is an array, e.g.
['articles'], so that your pagination information can be set under its own
pagination key.

Your JsonView and XmlView responses will now contain the pagination information,
and will look something like this:

{
    "articles": ["...", "...", "..."],
    "pagination": {
        "finder": "all",
        "page": 1,
        "current": 20,
        "count": 5000,
        "perPage": 20,
        "prevPage": false,
        "nextPage": true,
        "pageCount": 250,
        "sort": null,
        "direction": false,
        "limit": null,
        "sortDefault": false,
        "directionDefault": false
    }
}

Configuring the Pagination Output

ApiPagination has three keys for configuration: key, aliases, and visible.

  • key allows you to change the name of the pagination key.

  • aliases allows you to change names of the pagination detail keys.

  • visible allows you to set which pagination keys will be exposed in the
    response. Note: Whenever setting a key’s visibility, make sure to use the
    aliased name if you’ve given it one.

An example using all these configuration keys:

$this->loadComponent('BryanCrowe/ApiPagination.ApiPagination', [
    'key' => 'paging',
    'aliases' => [
        'page' => 'currentPage',
        'current' => 'resultCount'
    ],
    'visible' => [
        'currentPage',
        'resultCount',
        'prevPage',
        'nextPage'
    ]
]);

This configuration would yield:

{
    "articles": ["...", "...", "..."],
    "paging": {
        "prevPage": false,
        "nextPage": true,
        "currentPage": 1,
        "resultCount": 20
    }
}

Changelog

Please see CHANGELOG for more information what has changed
recently.

Testing

$ composer test

Contributing

Please see CONTRIBUTING and CONDUCT for
details.

Security

If you discover any security related issues, please email [email protected]
instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more
information.

Source

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *