Skip to content


The Paginator will help you iterate and paginate items.

It is provided in two versions: ArrayPaginator and DoctrineORMPaginator, available under the Leapt\CoreBundle\Paginator namespace. The docs will explain how to use the Doctrine ORM one, but it is easy to apply for the ArrayPaginator as well.

Example of Bootstrap 5 paginator
Example of Bootstrap 5 paginator


use Leapt\CoreBundle\Paginator\DoctrineORMPaginator;

// Get your QueryBuilder from some repository
$queryBuilder = $this->newsRepository->getActiveQueryBuilder();
$currentPage = $request->query->get('page', 1);

$paginator = new DoctrineORMPaginator($queryBuilder->getQuery());

// Use it directly or pass it to Twig Template
// Direct iteration is possible as it is Traversable
foreach ($paginator as $news) {
    // ...

Twig usage#

As you can do it using PHP, you can also iterate on the Paginator to use/render items.

The paginator_widget function will render the pagination, if there are more than one page available.

{% if paginator|length > 0 %}
    {% for news in paginator %}
        {{ include('news/_item.html.twig') }}
    {% endfor %}

    {{ paginator_widget(paginator) }}
{% else %}
    <p>There are no news available.</p>
{% endif %}

Twig Pagination#

Three pagination templates are provided by the bundle (but you can of course create your own):

  • @LeaptCore/Paginator/paginator_default_layout.html.twig (default)
  • @LeaptCore/Paginator/paginator_bootstrap3_layout.html.twig
  • @LeaptCore/Paginator/paginator_bootstrap4_layout.html.twig
  • @LeaptCore/Paginator/paginator_bootstrap5_layout.html.twig

You can override the pagination template locally (like you would do for form themes):

{% paginator_theme paginator '@LeaptCore/Paginator/paginator_bootstrap5_layout.html.twig' %}

Or globally, in the configuration:

# config/packages/leapt_core.yaml
        template: '@LeaptCore/Paginator/paginator_bootstrap5_layout.html.twig'