Installation Add the bundle via Composer:
composer require agusmoita/mottapg-bundle
Ensure Agusmoita\MottaPgBundle\AgusmoitaMottaPgBundle is registered in config/bundles.php.
First Use Case: Basic Pagination
Paginator and a repository into your controller.
use MottaPgBundle\Util\Paginator\Paginator;
public function index(Paginator $paginator, PersonRepository $repo)
{
return $paginator
->setView('person/index.html.twig')
->paginate($repo);
}
buildQuery() to return a QueryBuilder instance.
public function buildQuery($query, $paginator)
{
return $query->select('p'); // Adjust as needed
}
{% extends '@MottaPg/Paginator/table.html.twig' %}
{% block paginator_table_header %}
<th>Name</th>
{% endblock %}
{% block paginator_table_data %}
<td>{{ entity.name }}</td>
{% endblock %}
Key Files to Review
vendor/agusmoita/mottapg-bundle/Resources/views/Paginator/table.html.twig (base template).src/Util/Paginator/Paginator.php (core logic).Repository Integration
buildQuery() to customize queries (e.g., add WHERE, JOIN, or ORDER BY).public function buildQuery($query, $paginator)
{
return $query->where('p.isActive = :active')->setParameter('active', true);
}
Twig Customization
@MottaPg/Paginator/table.html.twig to modify:
paginator_table_header: Column headers.paginator_table_data: Cell data.paginator_actions: Custom action buttons (e.g., "Export").config/packages/mottapg.yaml (if available).Pagination Controls
{% block paginator_links %}
{{ parent() }} {# Extend default links #}
<a href="{{ path('custom_route') }}">Custom Action</a>
{% endblock %}
Export Functionality
whiteoctober/tcpdf-bundle (dependency) for PDF/Excel exports.{% block paginator_actions %}
<a href="{{ path('person_export_pdf') }}">Export PDF</a>
{% endblock %}
public function exportPdf(Paginator $paginator, PersonRepository $repo)
{
$data = $paginator->paginate($repo)->getResults();
// Use TCPDF to generate PDF from $data
}
Mass Actions
{% block paginator_actions %}
<form method="POST" action="{{ path('person_mass_delete') }}">
<button type="submit">Delete Selected</button>
</form>
{% endblock %}
Outdated Dependency
whiteoctober/tcpdf-bundle, which may have compatibility issues with newer Symfony versions. Test thoroughly or fork the bundle to update dependencies.Limited Documentation
paginator_links may break default behavior).table.html.twig) and Paginator.php for undocumented features.No Built-in DTO Support
Pagination State Not Persisted
$paginator->setPage($request->query->getInt('page', 1));
Twig Template Caching
php bin/console cache:clear
Query Inspection
QueryBuilder in buildQuery() to verify SQL:
public function buildQuery($query, $paginator)
{
\Log::debug($query->getSQL(), ['params' => $query->getParameters()]);
return $query;
}
Template Debugging
dump() to inspect variables:
{% block paginator_table_data %}
{{ dump(entity) }}
<td>{{ entity.name }}</td>
{% endblock %}
Common Issues
setView() points to a valid Twig template.buildQuery() returns a valid QueryBuilder with SELECT and ORDER BY.whiteoctober/tcpdf-bundle configuration and permissions for generated files.Custom Pagination Logic
Paginator class to add features (e.g., infinite scroll):
namespace App\Util\Paginator;
use MottaPgBundle\Util\Paginator\Paginator as BasePaginator;
class CustomPaginator extends BasePaginator
{
public function infiniteScroll($repository)
{
// Custom logic
}
}
config/services.yaml:
services:
App\Util\Paginator\CustomPaginator: autowire: true
Dynamic Column Sorting
buildQuery() to accept a sort parameter:
public function buildQuery($query, $paginator)
{
$sort = $paginator->getSort(); // Hypothetical method
return $query->orderBy("p.$sort", 'ASC');
}
Override Base Template
vendor/agusmoita/mottapg-bundle/Resources/views/Paginator/table.html.twig to templates/bundles/MottaPg/Paginator/table.html.twig for safe customization.Add New Export Formats
whiteoctober/tcpdf-bundle to extend PDF generation or integrate phpoffice/phpexcel for Excel:
use TCPDF;
public function exportExcel(Paginator $paginator, PersonRepository $repo)
{
$data = $paginator->paginate($repo)->getResults();
// Use PhpExcel to generate Excel from $data
}
How can I help you explore Laravel packages today?