Installation
composer require pagerfanta/twig
Ensure pagerfanta/pagerfanta is also installed (core library).
Basic Twig Integration
Add the extension to your Twig environment in app/Providers/AppServiceProvider.php:
use Pagerfanta\Twig\PagerfantaExtension;
public function register()
{
$this->app->make('twig')->addExtension(new PagerfantaExtension());
}
First Use Case In your controller, create a paginated result set:
use Pagerfanta\Pagerfanta;
use Pagerfanta\Adapter\ArrayAdapter;
$adapter = new ArrayAdapter($yourDataArray);
$pagerfanta = new Pagerfanta(new \Pagerfanta\Adapter\ArrayAdapter($adapter));
$pagerfanta->setMaxPerPage(10);
Pass to Twig:
return view('your_view', ['pagerfanta' => $pagerfanta]);
Render in Twig:
{% pagerfanta pagerfanta %}
Dynamic Pagination
Use Twig’s pagerfanta tag with custom templates:
{% pagerfanta pagerfanta with {
'previous': 'Previous',
'next': 'Next',
'item': 'item.html.twig',
'empty': 'empty.html.twig'
} %}
Integration with Eloquent
Combine with Laravel’s Illuminate\Pagination\LengthAwarePaginator:
$paginator = (new LengthAwarePaginator($items, $total, $perPage))->toArray();
$adapter = new ArrayAdapter($paginator['data']);
$pagerfanta = new Pagerfanta($adapter);
Custom Sliding Windows
Configure Pagerfanta before passing to Twig:
$pagerfanta->setMaxPerPage(15);
$pagerfanta->setCurrentPage($request->get('page', 1));
AJAX Pagination
Use Twig’s pagerfanta with data-* attributes for JS hooks:
{% pagerfanta pagerfanta with {
'item': 'ajax_item.html.twig',
'previous': '<a data-page="{{ pagerfanta.previous }}">Prev</a>'
} %}
Twig Extension Registration
PagerfantaExtension in AppServiceProvider will break pagination tags.addExtension() is called in register().Adapter Mismatch
ArrayAdapter with non-array data (e.g., Eloquent collections) may cause errors.$adapter = new ArrayAdapter($items->toArray());
Caching Issues
$pagerfanta->setCurrentPage($request->session()->get('page', 1));
Twig Template Overrides
resources/views/).getLoader() for missing templates.Laravel-Specific Shortcuts
Use collect() for seamless pagination:
$pagerfanta = (new Pagerfanta(new ArrayAdapter(
$items->collect()->toArray()
)))->setMaxPerPage(10);
Dynamic Template Paths
Override default template paths in config/twig.php:
'paths' => [
resource_path('views/pagerfanta'),
],
Performance
Pagerfanta\Adapter\DoctrineORMAdapter or Pagerfanta\Adapter\MongoDBAdapter instead of ArrayAdapter.Pagerfanta\Adapter\CallbackAdapter.Testing
Mock Pagerfanta in PHPUnit:
$mockAdapter = $this->createMock(ArrayAdapter::class);
$mockAdapter->method('getSlice')->willReturn([...]);
$pagerfanta = new Pagerfanta($mockAdapter);
How can I help you explore Laravel packages today?