dimmir/paginator-bundle

Flexible pagination bundle for Symfony 3. Created for use on the REST API

1.0.2 2017-05-22 05:08 UTC

This package is not auto-updated.

Last update: 2024-04-27 23:41:42 UTC


README

Flexible pagination bundle for Symfony 3. This bundle provides an easy way to add pagination support to the collection of your API. It easy used with FOSRestBundle

Build Status Coverage Status Dependency Status

Installation:

You can install this bundle using composer:

composer require dimmir/paginator-bundle

Add the bundle to your AppKernel.php file:

// app/AppKernel.php
public function registerBundles()
{
    return array(
        // ...
        new DMR\Bundle\PaginatorBundle\PaginatorBundle(),
        // ...
    );
}

Configuration

dmr_paginator:
    items_per_page: 25                                  # default number items per page
    max_items_per_page: ~                               # The maximum number of items per page.
    page_request_parameter_name: page                   # The name of current page for query parameter
    client_items_per_page: false                        # To allow the client to set the number of items per page.
    items_per_page_request_parameter_name: itemsPerPage # The name of items per page query parameter
    options:                                            # options fo Paginator
        fetch_join_collection: true                     # The option fetchJoinCollection for Doctrine ORM Paginator

Usage

Currently paginator can paginate:

  • Doctrine\ORM\QueryBuilder

Example for used with FOSRestBundle:

// AppBundle\Controller\UserController.php

    /**
     * @View()
     */
    public function cgetAction (Request $request)
    {
        $queryBuilder = $this->getDoctrine()->getManager()
                    ->getRepository('AppBundle:User')->createQueryBuilder('u');

        $paginator = $this->get('dmr_paginator.service')->pagination($queryBuilder);

        return new SliderRepresentation($paginator);
    }

Representations

DMR\Bundle\PaginatorBundle\Representation\CollectionRepresentation:

{
  "items": [
    {
      "id": 1,
    },
  ],
  "pagination": {
    "page": 1,
    "itemsPerPage": 25,
    "totalItemsCount": 40,
    "pagesCount": 2
  }
}

DMR\Bundle\PaginatorBundle\Representation\SliderRepresentation:

{
  "items": [
    {
      "id": 1,
    },
  ],
  "previus": 1,
  "next": 3
}