makedo / php-paginator
独立于数据源的 PHP 分页器
Requires
- php: >=7.1
Requires (Dev)
- phpspec/phpspec: ^5.1
This package is auto-updated.
Last update: 2024-09-05 19:55:21 UTC
README
这是另一个 PHP 分页器。本包的主要思想是构建独立于数据源的分页器,它具有在多种模式下工作的能力。
-
按 ID 跳过计数
$loader = function (int $limit, int $skip): iterable { //SELECT * from users WHERE id > $skip LIMIT $limit }; $perPage = 100; $lastIdOnPreviousPage = 34; $paginatorFactory = new SkipById($perPage); $page = $paginatorFactory ->createPaginator(new CallableLoader($loader), $lastIdOnPreviousPage) ->paginate() ;
在这个例子中,你可以使用
id
作为跳过值。如你所见,Loader 函数接受id
在$skip
变量中。它应该是上一页上的最后一个项目的id
,它来自客户端。对于第一页,它应该是 0。对于$page->hasNext
分页器将加载$perPage + 1
个项目,然后检查实际加载的项目数量是否超过$perPage
。可选地,你可以设置
$currentPage
的值,它将被设置为$page->currentPage
。 -
按 ID 跳过计数并使用总计数
$loader = function (int $limit, int $skip): iterable { //SELECT * from users WHERE id > $skip LIMIT }; $counter = function (): int { //SELECT count(id) from users }; $perPage = 100; $lastIdOnPreviousPage = 35; $paginatorFactory = new SkipByIdCountable($perPage); $page = $paginatorFactory ->createPaginator( new CallableLoader($loader), new CallableCounter($counter), $lastIdOnPreviousPage ) ->paginate() ;
在上面的例子中,分页器按 ID 跳过计数并使用总计数作为
$page->total
、$page->totalPages
的值。对于$page->hasNext
分页器将加载$perPage + 1
个项目,然后检查实际加载的项目数量是否超过$perPage
。 -
按 ID 跳过计数并使用总计数和当前页
$loader = function (int $limit, int $skip): iterable { //SELECT * from users WHERE id > $skip LIMIT }; $counter = function (): int { //SELECT count(id) from users }; $perPage = 100; $lastIdOnPreviousPage = 35; $currentPage = 4; $paginatorFactory = new SkipByIdCountable($perPage); $page = $paginatorFactory ->createPaginator( new CallableLoader($loader), new CallableCounter($counter), $lastIdOnPreviousPage, $currentPage ) ->paginate() ;
在上面的例子中,分页器按 ID 跳过计数并使用总计数和
$currentPage
作为$page->total
、$page->totalPages
、$page->hasNext
的值。在这种情况下,我们知道$currentPage
的值,在实际情况中它来自客户端,因此我们可以使用总计数和$currentPage
来计算$page->hasNext
,而不使用$perPage + 1
策略。 -
按偏移量跳过计数
$loader = function (int $limit, int $skip): iterable { //SELECT * from users LIMIT $limit OFFSET $skip }; $perPage = 100; $currentPage = 2; $paginatorFactory = new SkipByOffset($perPage); $page = $paginatorFactory ->createPaginator(new CallableLoader($loader), $currentPage) ->paginate() ;
在上面的例子中,分页器根据 $perPage 和 $currentPage 的值按偏移量跳过计数。对于计算
$page->hasNext
,分页器将加载$perPage + 1
个项目,然后检查实际加载的项目数量是否超过$perPage
。-
按偏移量跳过计数并使用总计数
$loader = function (int $limit, int $skip): iterable { //SELECT * from users LIMIT $limit OFFSET $skip }; $counter = function (): int { //SELECT count(id) from users }; $perPage = 100; $currentPage = 2; $paginatorFactory = new SkipByOffsetCountable($perPage); $page = $paginatorFactory ->createPaginator(new CallableLoader($loader), new CallableCounter($counter), $currentPage) ->paginate() ;
在上面的例子中,分页器按偏移量跳过计数并使用总计数作为
$page->total
、$page->totalPages
的值。
-