## Getting Started
### Minimal Setup
1. **Installation**:
```bash
composer require babdev/pagerfanta-bundle
Ensure the bundle is enabled in config/bundles.php (auto-enabled in Symfony 4+).
First Use Case: Create a paginated query in a controller:
use Pagerfanta\Doctrine\ORM\QueryAdapter;
use Pagerfanta\Pagerfanta;
$queryBuilder = $entityManager->getRepository(Entity::class)->createQueryBuilder('e');
$pagerfanta = new Pagerfanta(new QueryAdapter($queryBuilder));
return $this->render('template.html.twig', ['pager' => $pagerfanta]);
Render in Twig:
{{ pagerfanta(pager) }}
This auto-generates pagination links using the default view.
API Responses: Serialize Pagerfanta directly in controllers:
return $this->json($pagerfanta, context: ['groups' => ['api']]);
Outputs structured JSON with items and pagination metadata.
Custom Views:
Define reusable views in config/services.yaml:
services:
pagerfanta.view.custom:
class: Pagerfanta\View\OptionableView
arguments:
- '@pagerfanta.view.default'
- { proximity: 3, max_links: 5 }
tags: { name: pagerfanta.view, alias: custom }
Use in Twig: {{ pagerfanta(pager, 'custom') }}.
Dynamic Route Parameters:
Override the default page parameter:
{{ pagerfanta(pager, 'default', { pageParameter: '[custom_page]' }) }}
Doctrine Integration:
Use QueryAdapter for Doctrine ORM:
$adapter = new QueryAdapter($queryBuilder, $fetchJoinCollection = false);
$pagerfanta = new Pagerfanta($adapter);
Custom Route Generation: Replace the default route generator factory:
services:
pagerfanta.route_generator_factory:
class: App\RouteGenerator\CustomRouteGeneratorFactory
pagerfanta() for seamless pagination rendering.groups in serialization context for API responses:
return $this->json($pagerfanta, context: ['groups' => ['pagination']]);
config/packages/babdev_pagerfanta.yaml:
babdev_pagerfanta:
default_view: custom
default_twig_template: '@App/pagination.html.twig'
Route Parameter Naming:
[param]) breaks URL generation.pageParameter: '[page]' (correct) vs. pageParameter: 'page' (fails).Serialization Quirks:
return $this->json($pagerfanta, context: ['groups' => ['api', 'pagination']]);
pagerfanta_preserve_keys context for array key preservation:
return $this->json($pagerfanta, context: ['pagerfanta_preserve_keys' => true]);
Exception Handling:
NotValidCurrentPageException to HTTP 404. Disable with:
babdev_pagerfanta:
exceptions_strategy:
not_valid_current_page: custom
View Caching:
pagerfanta.view; otherwise, they won’t register.ViewFactoryInterface to retrieve them.Check Registered Views: Dump available views in a controller:
$viewFactory = $this->container->get('pagerfanta.view_factory');
dump($viewFactory->getViewNames());
Validate Route Generation: Test route generation manually:
$routeGenerator = $this->container->get('pagerfanta.route_generator_factory')->create();
$url = $routeGenerator->generate('app_route_name', ['page' => 2]);
Twig Debugging: Override the Twig extension temporarily to debug:
$twig->addExtension(new \BabDev\PagerfantaBundle\Twig\PagerfantaExtension($viewFactory, $routeGeneratorFactory));
Custom Views:
Extend Pagerfanta\View\ViewInterface and register via pagerfanta.view tag.
Route Generators:
Implement RouteGeneratorInterface and replace the factory service.
Serializer Normalizers: Add custom normalizers for Pagerfanta in Symfony’s serializer configuration:
framework:
serializer:
mappings:
- App\Serializer\PagerfantaNormalizer
Event Listeners:
Listen for Pagerfanta\Event\PagerfantaEvents to modify pagination behavior dynamically.
---
How can I help you explore Laravel packages today?