- 前言
- 版本管理
- 快速入门
- 核心架构
- 基础功能
- 数据库模型
- 微服务
- 网络服务
- 消息队列
- 客户端
- 其它组件
- 应用部署
- Awesome Hyperf
- 组件开发指南
- 版本升级指南
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
分页器
在您需要对数据进行分页处理时,可以借助 hyperf/paginator 组件很方便的解决您的问题,您可对您的数据查询进行一定的封装处理,以便更好的使用分页功能,该组件也可用于其它框架上。
通常情况下,您对分页器的需求可能都是存在于数据库查询上,hyperf/database 数据库组件已经与分页器组件进行了结合,您可以在进行数据查询时很方便的调用分页器来实现分页,具体可查阅 数据库模型 - 分页 章节。
安装
composer require hyperf/paginator
基本使用
只需存在数据集和分页需求,便可通过实例化一个 Hyperf\Paginator\Paginator
类来进行分页处理,该类的构造函数接收 __construct($items, int $perPage, ?int $currentPage = null, array $options = [])
参数,我们只需以 数组(Array)
或 Hyperf\Utils\Colletion
集合类的形式传递数据集到 $items
参数,并设定每页数据量 $perPage
和当前页数 $currentPage
即可,$options
参数则可以通过 Key-Value
的形式定义分页器实例内的所有属性,具体可查阅分页器类的内部属性。
<?php
namespace App\Controller;
use Hyperf\HttpServer\Annotation\AutoController;
use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\Paginator\Paginator;
use Hyperf\Utils\Collection;
/**
* @AutoController()
*/
class UserController
{
public function index(RequestInterface $request)
{
$currentPage = (int) $request->input('page', 1);
$perPage = (int) $request->input('per_page', 2);
// 这里根据 $currentPage 和 $perPage 进行数据查询,以下使用 Collection 代替
$collection = new Collection([
['id' => 1, 'name' => 'Tom'],
['id' => 2, 'name' => 'Sam'],
['id' => 3, 'name' => 'Tim'],
['id' => 4, 'name' => 'Joe'],
]);
$users = array_values($collection->forPage($currentPage, $perPage)->toArray());
return new Paginator($users, $perPage, $currentPage);
}
}
分页器方法
获取当前页数
<?php
$currentPage = $paginator->currentPage();
获取当前页的条数
<?php
$count = $paginator->count();
获取当前页中第一条数据的编号
<?php
$firstItem = $paginator->firstItem();
获取当前页中最后一条数据的编号
<?php
$lastItem = $paginator->lastItem();
获取是否还有更多的分页
<?php
if ($paginator->hasMorePages()) {
// ...
}
获取对应分页的 URL
<?php
// 下一页的 URL
$nextPageUrl = $paginator->nextPageUrl();
// 上一页的 URL
$previousPageUrl = $paginator->previousPageUrl();
// 获取指定 $page 页数的 URL
$url = $paginator->url($page);
是否处于第一页
<?php
$onFirstPage = $paginator->onFirstPage();
是否有更多分页
<?php
$hasMorePages = $paginator->hasMorePages();
每页的数据条数
<?php
$perPage = $paginator->perPage();
数据总数
Hyperf\Paginator\Paginator 没有这个方法,需要使用 Hyperf\Paginator\LengthAwarePaginator
<?php
$total = $paginator->total();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论