Cos’è la paginazione
La paginazione di Laravel è integrata con Query Builder ed Eloquent ORM e si può usare senza configurazioni. La pagina corrente viene letta automaticamente dal parametro di querypage della richiesta HTTP e aggiunta automaticamente ai link generati.
L’HTML predefinito è compatibile con Tailwind CSS; puoi scegliere anche Bootstrap CSS.
Tre tipi di paginazione
Uso di base
Paginazione con Query Builder
Paginazione con Eloquent
simplePaginate
Quando non serve la query di conteggio totale (mostri solo i link “precedente” e “successivo”), è più efficiente usaresimplePaginate().
cursorPaginate (paginazione a cursore)
La paginazione a cursore usa una clausola WHERE al posto di OFFSET, offrendo prestazioni elevate su grandi volumi di dati. Particolarmente adatta a UI a scroll infinito.Confronto tra OFFSET e cursore
Implementazione nel controller
Visualizzazione dei link di paginazione in Blade
links() genera automaticamente l’HTML dei link. Vengono mostrati i link alle 3 pagine prima e dopo la pagina corrente.
Regolare il numero di link mostrati
CononEachSide() puoi cambiare il numero di link mostrati prima e dopo la pagina corrente.
Ricevere dalla richiesta il numero di elementi per pagina
Mostrare più paginator nella stessa pagina
Se hai due paginator sulla stessa schermata, entrambi usano il parametropage andando in conflitto. Cambia il nome del parametro con il terzo argomento.
Personalizzazione degli URL
Cambiare l’URL base
Aggiungere parametri di query
Aggiungere un frammento hash
Risposta API (output JSON)
Restituendo il paginator direttamente da una route o controller, viene convertito automaticamente in JSON.Combinazione con le API resource
Per incapsulare il risultato dipaginate() in una API resource collection, passalo a UserResource::collection().
UserResource::collection(), le informazioni di paginazione vengono aggiunte automaticamente come metadati.
Nel JSON di
cursorPaginate() non ci sono numeri di pagina ma next_cursor e prev_cursor. Il client API usa questi valori come parametro cursor della richiesta successiva.Viste di paginazione personalizzate
Specificare direttamente il file della vista
Cambiare la vista predefinita con un file personalizzato
Pubblica prima le viste ufficiali e poi personalizzale.resources/views/vendor/pagination/ vengono generati i seguenti file:
tailwind.blade.php— predefinito (per Tailwind CSS)bootstrap-5.blade.php— per Bootstrap 5simple-tailwind.blade.php— per simplePaginate- …
tailwind.blade.php oppure crea una nuova vista e indicala in AppServiceProvider.
Usare Bootstrap CSS
Se al posto di Tailwind usi Bootstrap, configuralo inboot() di AppServiceProvider.
Creazione manuale di un paginator
Se vuoi paginare dati esistenti come un array, istanzia direttamente la classe paginator.Metodi d’istanza comuni
Riepilogo
Come scegliere il metodo di paginazione
Come scegliere il metodo di paginazione
paginate()— Quando servono totale e link ai numeri di pagina (schermate a lista comuni)simplePaginate()— Quando bastano i soli link “precedente” e “successivo” (più veloce)cursorPaginate()— Con grandi volumi di dati, scroll infinito o scritture frequenti (massime prestazioni)
Pattern base di visualizzazione Blade
Pattern base di visualizzazione Blade
paginate() alla vista e usa links() per emettere i link alle pagine.
La pagina corrente viene rilevata automaticamente dal parametro di query page.Paginazione nelle API
Paginazione nelle API
Restituendo direttamente il paginator dalla route, viene convertito automaticamente in JSON.
Per combinarlo con le API resource restituisci
UserResource::collection($paginator).
La risposta contiene data (array di record) e vari metadati.