tuum/pagination

PSR-7的通用分页包。

2.0.0 2022-02-24 03:28 UTC

This package is auto-updated.

Last update: 2024-09-24 09:11:18 UTC


README

经典偏移/限制风格的通用分页包。

Scrutinizer Code Quality

一些可能有趣的功能:

  • 存储当前页面和表单输入到会话中,
  • 可以使用PSR-7 ServerRequestInterface对象,
  • 有一个灵活的分页HTML生成器。

简而言之,使用_page访问页面

http://example.come/pagination?_page

将恢复最后的分页结果。

PSR

PSR-1, PSR-2, PSR-4, 和 PSR-7。

许可

MIT许可

安装

请使用composer安装WScore/Pagination包。

$ composer require "tuum/pagination: ^1.0"

通过示例代码入门

页面键变量,_page是关键。

示例HTML表单

让我们从一个分页的HTML表单开始,例如;

<form action="">
  <input type="text" name="type" />
  <input type="integer" name="num" />
  <input type="submit" />
</form>

请注意,不应该有_page变量。

分页查询

使用结合所有功能的Pagination类的最简单方法。

要实例化一个Pageinate对象,

use Tuum\Pagination\Inputs;
use Tuum\Pagination\Pagination;

$pager = new Pager();
$pager->withRequest($request); // PSR-7 server request.
$inputs = $pager->getInputs();

$found = $pdo->prepare("SELECT * FROM tbl WHERE type=? and num>? OFFSET ? LIMIT ?")
    ->execute([
        $inputs->get('type'),
        $inputs->get('num'),
        $inputs->getOffset(),
        $inputs->getLimit(),
    ])
    ->fetchAll();

Inputs::get*方法应提供构建查询所需的信息。通过Inputs::setList方法设置找到的结果。

typenum的值

  • 从表单输入中获取,然后在没有输入查询中存在_page变量的情况下保存到会话中,或者
  • 从会话数据中获取(如果存在_page)。

带有页面编号的_page

仅使用_page请求将恢复会话中的查询值(类型和数量),并设置偏移值从页面编号。例如,

GET /find?_page=2

将设置偏移量(_page-1)*_limit,页面编号为2

仅带有_page的查询

仅使用_page但没有页面编号的请求将恢复会话中的页面编号和其他参数。例如,

GET /find?_page

将设置偏移量为上次请求的页面编号。

生成分页HTML

分页类实现了__toString方法以输出分页HTML字符串。默认情况下,分页对象输出以下样式的分页HTML,用于Bootstrap ver3。

echo $inputs;

sample paginate HTML

可以通过修改分页逻辑和HTML/CSS格式化器来更改分页和HTML/CSS样式,如下所示;

$pages = $inputs->getPagination();
$pages->numLinks = 7;
$pagination = new ToBootstrap3($paginate)
echo $pagination;

技术细节

设置总数

分页器不知道如何获取总数;请使用Inputs::setTotal方法在调用方法的闭包内提供总数。

$inputs->setTotal(
    $pdo->prepare("SELECT COUNT(*) FROM tbl WHERE type=? and num>? ")
        ->execute([
            $inputs->get('type'),
            $inputs->get('num')
        ])
        ->fetchColumn()
);

安全

默认情况下,输入值经过验证,不包含空值以及有效的UTF-8字符串。

要更改验证,可以在Pager构造函数中传递它;

$pager->pager->useValidator(function(&$v) {
        $v = 'validate=' . $v;
    });

注意:这是默认的闭包。

function (&$v) {
	if (!is_string($v) && !is_numeric($v)) {
        $v = '';
    } elseif (strpos($v, "\0") !== false) {
        $v = '';
    } elseif (!mb_check_encoding($v, 'UTF-8')) {
        $v = '';
    }
};