Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Zend Paginator Laravel Package

zendframework/zend-paginator

Abandoned Zend Framework paginator component for splitting data collections into pages and rendering pagination controls. Repository moved to laminas/laminas-paginator; use Laminas for active maintenance and current documentation.

View on GitHub
Deep Wiki
Context7

Getting Started

zend-paginator is a lightweight, standalone pagination component originally from Zend Framework (now Laminas). Despite being archived (as of 2019), it remains widely used and stable. To begin:

  • Install via Composer: composer require laminas/laminas-paginator (note: the package was transferred to Laminas).
  • If constrained to zendframework/zend-paginator, use composer require zendframework/zend-paginator (though migration to Laminas is strongly advised for support).
  • First use: wrap any traversable data (array, iterator, database result set) in a Paginator object and assign a Scan or DbSelect adapter (or custom). For simple cases:
    $paginator = new Laminas\Paginator\Paginator(
        new Laminas\Paginator\Adapter\ArrayAdapter($data)
    );
    $paginator->setCurrentPageNumber($page);
    $paginator->setItemCountPerPage(10);
    

Implementation Patterns

  • Adapter-Driven Flexibility: Use built-in adapters (ArrayAdapter, DbSelect, DbTableSelect) or implement AdapterInterface for custom sources (e.g., Elasticsearch, GraphQL).
  • Lazy Loading: Pagination works with any traversable—ideal for large datasets loaded lazily (e.g., via doctrine hydration or cursor-based DB queries).
  • Integration in MVC: In Laminas MVC or Symfony, integrate via service factories (e.g., PaginatorFactory) that inject adapters and page parameters from request.
  • View Rendering: Use ->getPages() for partial rendering (pages, next/prev, ranges) and ->toArray() for JSON APIs. Templates typically loop foreach ($paginator as $item).
  • Caching: Enable caching at adapter level (e.g., DbSelect caching via Zend\Db\ResultSet\ResultSet or custom caching in paginateItems()).

Gotchas and Tips

  • No Active Development: Since archived, bugs or PHP 8.2+ deprecations won’t be patched—migrate to laminas/laminas-paginator immediately (same namespace, just Laminas\*).
  • Adapter Caveats: DbSelect is powerful but requires manual SQL; for ORMs like Doctrine, avoid direct DB queries—implement a custom adapter that accepts a QueryBuilder and fetches count/offset separately.
  • Performance: count() on large datasets can be slow. Always use count() caching or precompute totals (e.g., via separate SELECT COUNT(*)).
  • Page Range Mismatch: If setItemCountPerPage(0) or negative, pagination breaks silently—validate inputs.
  • Custom Page Numbering: Overriding setCurrentPageNumber() with non-integer values (e.g., strings) silently defaults to page 1; cast to int.
  • Extension Points: Override Laminas\Paginator\Paginator::createItems() for custom item slicing (e.g., for cursor pagination). For full cursor-based pagination (e.g., ?cursor=abc), consider using a custom adapter or supplement with laminas/laminas-paginator’s LimitCount pattern.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
davejamesmiller/laravel-breadcrumbs
artisanry/parsedown
christhompsontldr/phpsdk
enqueue/dsn
bunny/bunny
enqueue/test
enqueue/null
enqueue/amqp-tools
milesj/emojibase
bower-asset/punycode
bower-asset/inputmask
bower-asset/jquery
bower-asset/yii2-pjax
laravel/nova
spatie/laravel-mailcoach
spatie/laravel-superseeder
laravel/liferaft
nst/json-test-suite
danielmiessler/sec-lists
jackalope/jackalope-transport