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.


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):

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

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

Or globally, in the configuration:

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

Form Types

Data lists