分页器

在您需要对数据进行分页处理时,可以借助 hyperf/paginator 组件很方便的解决您的问题,您可对您的数据查询进行一定的封装处理,以便更好的使用分页功能,该组件也可用于其它框架上。通常情况下,您对分页器的需求可能都是存在于数据库查询上,hyperf/database 数据库组件已经与分页器组件进行了结合,您可以在进行数据查询时很方便的调用分页器来实现分页,具体可查阅 数据库模型 - 分页 章节。

安装

  1. 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 的形式定义分页器实例内的所有属性,具体可查阅分页器类的内部属性。

  1. <?php
  2. namespace App\Controller;
  3. use Hyperf\HttpServer\Annotation\AutoController;
  4. use Hyperf\HttpServer\Contract\RequestInterface;
  5. use Hyperf\Paginator\Paginator;
  6. /**
  7. * @AutoController()
  8. */
  9. class UserController
  10. {
  11. public function index(RequestInterface $request)
  12. {
  13. $currentPage = $request->input('page', 1);
  14. $perPage = $request->input('per_page', 2);
  15. $users = [
  16. ['id' => 1, 'name' => 'Tom'],
  17. ['id' => 2, 'name' => 'Sam'],
  18. ['id' => 3, 'name' => 'Tim'],
  19. ['id' => 4, 'name' => 'Joe'],
  20. ];
  21. return new Paginator($users, (int) $perPage, (int) $currentPage);
  22. }
  23. }

分页器方法

获取当前页数

  1. <?php
  2. $currentPage = $paginator->currentPage();

获取当前页的条数

  1. <?php
  2. $count = $paginator->count();

获取当前页中第一条数据的编号

  1. <?php
  2. $firstItem = $paginator->firstItem();

获取当前页中最后一条数据的编号

  1. <?php
  2. $lastItem = $paginator->lastItem();

获取是否还有更多的分页

  1. <?php
  2. if ($paginator->hasMorePages()) {
  3. // ...
  4. }

获取对应分页的 URL

  1. <?php
  2. // 下一页的 URL
  3. $nextPageUrl = $paginator->nextPageUrl();
  4. // 上一页的 URL
  5. $previousPageUrl = $paginator->previousPageUrl();
  6. // 获取指定 $page 页数的 URL
  7. $url = $paginator->url($page);

是否处于第一页

<?php
$onFirstPage = $paginator->onFirstPage();

是否有更多分页

<?php
$hasMorePages = $paginator->hasMorePages();

每页的数据条数

<?php
$perPage = $paginator->perPage();

数据总数

<?php
$total = $paginator->total();