dvsouto/laravel-json-paginate

在 Laravel/Lumen 中创建 API 的 JSON 分页

1.0.7 2020-06-05 09:06 UTC

This package is auto-updated.

Last update: 2024-09-20 07:31:47 UTC


README

在原始的 Laravel 应用程序中,查询构建器(https://laravel.net.cn/docs/7.x/pagination#paginating-eloquent-results)存在 paginate 方法,该方法返回格式化到前端分页的结果。

此包向 Eloquent 查询构建器添加了一个 jsonPaginate 方法,该方法监听以 JSON 格式返回的结果,以用于 API 和在其他应用程序中显示数据。

安装

您可以通过 composer 安装此包

composer require dvsouto/laravel-json-paginate

Laravel 5.5 及以上版本中,服务提供者将自动注册。在框架的较旧版本中,只需将服务提供者添加到 config/app.php 文件中

'providers' => [
    ...
    Bitnary\JsonPaginate\JsonPaginateServiceProvider::class, // Bitnary JsonPaginate for o Eloquent
];

在 Lumen 中,您需要在 bootstrap/app.php 文件中加载服务提供者

    ...
    $app->register(Bitnary\JsonPaginate\JsonPaginateServiceProvider::class); // Bitnary JsonPaginate for o Eloquent

用法

要分页准备从 API 返回的结果,只需调用 jsonPaginate 方法。

YourModel::jsonPaginate();

当然,您仍然可以使用所有已知的构建器方法

YourModel::where('my_field', 'myValue')->jsonPaginate();

默认情况下,最大页面大小设置为 100。您可以通过传递值给 jsonPaginate 来更改此数字。您还可以传递到方法中的每个侧面参数以生成页面键。

$per_page = 10; // 10 Results per page
$each_side = 3; // 3 buttons on each side

YourModel::jsonPaginate($per_page, $each_side);

默认情况下,最大页面大小设置为 100。您可以通过传递值给 jsonPaginate 来更改此数字。

$maxResults = 10;

YourModel::jsonPaginate($maxResults);

此返回包含以下参数的数组

{
    "data": [ // (object) Results for this page
        {
            "id": 1,
            "name": "Davi Souto"
        },
        {
            "id": 2,
            "name": "Lorem Ipsum"
        },
        {
            "id": 3,
            "name": "Sit Amet"
        },
        ...
    ],
    "paginator": {
        "current_page": 1, // (int) Current page number
        "prev_page": 1, // (int) Previous page number
        "next_page": 2, // (int) Next page number
        "first_page": 1, // (int) The first page (always 1),
        "is_first_page": true, // (boolean) Is in first page ?
        "last_page": 25, // (int) Last page number 
        "is_last_page": false, // (boolean) Is in last page ?
        "page_keys": [ // (array) Contains the list of pages to display in front
            1,
            2,
            3,
            4,
        ],
        "from_item": 1, // (int) Results for this page starts from this item
        "to_item": 100, // (int) Results for this page ends in this item
        "total_items": 100, // (int) Total of existent itens 
        "per_page": 10, // (int) Results for this page ends in this item
        "display_items": // (int) Total of itens in this page
    }
}

安全

如果您发现任何与安全相关的问题,请通过电子邮件 davi.souto@gmail.com 联系我们,而不是使用问题跟踪器。

鸣谢

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件