hyperf/docs/zh-hk/paginator.md

3.2 KiB

分頁器

在您需要對數據進行分頁處理時,可以藉助 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();

數據總數

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