abstract class Paginator implements Countable, Iterator

Properties

protected int $pageNumber

The page number applied to the next request.

protected int $currentPage

The zero-based iterator position.

protected int $startPage

The first page number requested after rewind.

protected int|null $maxPages

The optional maximum number of pages to request.

protected int|null $perPageLimit

The optional result limit per page.

protected null|Response<mixed> $currentResponse

The current response.

protected bool $currentPageLoaded

Whether the current page has been fetched and mapped.

protected TItem> $currentPageItems

The items mapped from the final current response.

protected int $totalResults

The total number of mapped results processed.

protected bool $detectInfiniteLoop

Whether repeated response bodies should stop iteration.

protected bool $pooling

Whether the paginator is currently preparing pooled pages.

protected array<int, string> $lastFiveBodyChecksums

The latest response body checksums.

Methods

__construct(Connector $connector, Request $request)

Create a paginator.

current()

Get the response for the current page.

void
next()

Move to the next page.

int
key()

Get the current iterator key.

bool
valid()

Determine if another page should be requested.

void
rewind()

Reset all iterator state.

void
onRewind()

Process extra state when the paginator rewinds.

iterable
items()

Iterate over every response item.

collect(bool $throughItems = true)

Create a lazy collection from page responses or response items.

array
pool(int $concurrency = 5, callable|null $responseHandler = null, callable|null $exceptionHandler = null)

Send every page through a bounded coroutine pool.

int
totalResults()

Get the total number of processed results.

maxPages(int|null $maxPages)

Set the maximum number of pages to request.

perPageLimit(int|null $perPageLimit)

Set the number of results requested per page.

request()

Get the cloned request used by this paginator.

int
currentPage()

Get the current zero-based page position.

startPage(int $startPage)

Set the first page number requested after rewind.

int
count()

Count the number of pages yielded by the iterator.

array
pageItems(Response $response)

Resolve response items using the request override when present.

iterable
remainingRequests(int $lastPage)

Yield independently addressable page requests after the first page.

int
getTotalPages(Response $response)

Get the total number of independently addressable pages.

applyPagination(Request $request)

Apply pagination to a cloned request.

bool
isLastPage(Response $response)

Determine if the response is the last page.

array
getPageItems(Response $response, Request $request)

Get the items from one page.

Details

at line 100
__construct(Connector $connector, Request $request)

Create a paginator.

Parameters

Connector $connector
Request $request

at line 141
Response current()

Get the response for the current page.

Return Value

Response

at line 162
void next()

Move to the next page.

Return Value

void

at line 173
int key()

Get the current iterator key.

Return Value

int

at line 181
bool valid()

Determine if another page should be requested.

Return Value

bool

at line 193
void rewind()

Reset all iterator state.

Return Value

void

at line 208
protected void onRewind()

Process extra state when the paginator rewinds.

Return Value

void

at line 217
iterable items()

Iterate over every response item.

Return Value

iterable

at line 231
LazyCollection collect(bool $throughItems = true)

Create a lazy collection from page responses or response items.

Parameters

bool $throughItems

Return Value

LazyCollection

at line 245
array pool(int $concurrency = 5, callable|null $responseHandler = null, callable|null $exceptionHandler = null)

Send every page through a bounded coroutine pool.

Parameters

int $concurrency
callable|null $responseHandler
callable|null $exceptionHandler

Return Value

array

at line 322
int totalResults()

Get the total number of processed results.

Return Value

int

at line 332
Paginator maxPages(int|null $maxPages)

Set the maximum number of pages to request.

Parameters

int|null $maxPages

Return Value

Paginator

at line 344
Paginator perPageLimit(int|null $perPageLimit)

Set the number of results requested per page.

Parameters

int|null $perPageLimit

Return Value

Paginator

at line 356
Request request()

Get the cloned request used by this paginator.

Return Value

Request

at line 364
int currentPage()

Get the current zero-based page position.

Return Value

int

at line 374
Paginator startPage(int $startPage)

Set the first page number requested after rewind.

Parameters

int $startPage

Return Value

Paginator

at line 384
int count()

Count the number of pages yielded by the iterator.

Return Value

int

at line 403
protected array pageItems(Response $response)

Resolve response items using the request override when present.

Parameters

Response $response

Return Value

array

at line 420
protected iterable remainingRequests(int $lastPage)

Yield independently addressable page requests after the first page.

Parameters

int $lastPage

Return Value

iterable

at line 435
protected int getTotalPages(Response $response)

Get the total number of independently addressable pages.

Parameters

Response $response

Return Value

int

at line 446
abstract protected Request applyPagination(Request $request)

Apply pagination to a cloned request.

Parameters

Request $request

Return Value

Request

at line 453
abstract protected bool isLastPage(Response $response)

Determine if the response is the last page.

Parameters

Response $response

Return Value

bool

at line 462
abstract protected array getPageItems(Response $response, Request $request)

Get the items from one page.

Parameters

Response $response
Request $request

Return Value

array