La tâche 014 a introduit une abstraction de datasource permettant à la DataTable de fonctionner avec :
[
'rows' => [...],
]
et :
[
'source' => User::class,
]
Les fonctionnalités suivantes sont déjà opérationnelles :
rowsLa récupération des données est désormais abstraite.
La pagination reste cependant incomplète.
Actuellement, les résultats sont récupérés dans leur intégralité.
Introduire une pagination réelle pour toutes les datasources tout en conservant les fonctionnalités existantes.
La pagination doit fonctionner de manière identique quelle que soit la source utilisée.
La DataTable ne doit pas contenir de logique spécifique à Doctrine.
La pagination doit être gérée au niveau des datasources.
Architecture attendue :
DataTable
│
▼
DataSourceResolver
│
▼
DataSourceInterface
├── ArrayDataSource
└── DoctrineDataSource
Chaque datasource reste responsable de :
Étendre ou utiliser DataTableState afin de transporter les informations nécessaires à la pagination :
Exemples :
$page;
$perPage;
Le composant ne doit pas manipuler directement les détails d'implémentation des datasources.
Étendre ou utiliser DataTableResult afin de transporter les informations nécessaires à l'affichage de la pagination.
Exemples :
$rows;
$totalRows;
$currentPage;
$perPage;
$totalPages;
L'implémentation exacte reste libre tant que le composant dispose des informations nécessaires.
La pagination doit être appliquée après :
Responsabilités :
La pagination doit être effectuée côté base de données.
Responsabilités :
La datasource ne doit jamais charger l'intégralité des résultats pour ensuite paginer en mémoire.
L'approche attendue est équivalente à :
COUNT(...)
puis :
LIMIT ...
OFFSET ...
Les comportements existants doivent rester inchangés :
[
'rows' => [...],
]
et :
[
'source' => [...],
]
doivent continuer à fonctionner.
Aucune régression ne doit être introduite sur :
Mettre à jour la page :
demo/templates/demo/index.html.twig
afin de démontrer la pagination sur :
[
'source' => User::class,
]
avec un volume suffisant de données générées via Foundry.
Tous les contrôles qualité doivent rester verts :
make tests
make phpstan
make lint
make lint-twig
make npm-build
rows conservéesource conservéeNe pas implémenter dans cette tâche :
Ces sujets seront traités dans des tâches ultérieures.
Cette tâche n'a pas pour objectif d'ajouter de nouvelles capacités métier.
Son objectif est de compléter l'abstraction introduite lors de la tâche 014 afin de rendre la DataTable utilisable sur des volumes de données réels tout en conservant sa philosophie :
How can I help you explore Laravel packages today?