Laravel: impostare la paginazione dei dati nelle view

Laravel: impostare la paginazione dei dati nelle view

Con Laravel è semplice impostare la paginazione dei dati nelle view.

Creare il controller

Creiamo un nuovo controller con il seguente comando da shell:

php artisan make:controller HomeController

Questo comando genererà il file HomeController.php in app/Http/Controllers con la seguente struttura iniziale.

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class HomeController extends Controller
{
}

Ora dobbiamo includere il modello dei dati nel controller. Quindi scriviamo:

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

use App\Product;

class HomeController extends Controller
{
}

A questo punto possiamo definire il metodo che gestirà la route della home page reperendo dieci modelli di dati ordinati per prezzo con l'aggiunta della paginazione.

class HomeController extends Controller
{
    public function index()
    {
        $products = Product::orderBy('price', 'asc')->paginate(10);
        return view('home', [
            'title' => 'Site',
            'products' => $products
        ]);
    }
}

view() accetta come primo parametro il nome del template Blade e come secondo parametro un array associativo contenente le variabili da passare alla view, ossia al template engine Blade. Anche se i template Blade hanno come nome del file nome.blade.php, si specifica solo il nome senza la doppia estensione.

Un modo alternativo di usare questo helper globale è quello che sfrutta la funzione PHP compact() con le variabili locali del metodo del controller.

class HomeController extends Controller
{
    public function index()
    {
        $products = Product::orderBy('price', 'asc')->paginate(10);
        $title = 'Site';
        
        return view('home', compact('title', 'products');
    }
}

Questa soluzione genera ugualmente l'array associativo da passare a view(), ma come si può notare è molto più concisa.

Il metodo paginate() genera automaticamente la logica alla base della paginazione dei dati e funziona insieme ad un metodo del modello che vedremo di seguito nella view.

Creare la view

Il template della home page (views/home.blade.php) avrà allora questa struttura.

@extends('layouts.site')
@section('content')


    <section class="row products">

        @foreach($products as $product)

            @include('product', ['product' => $product])

        @endforeach
        {{ $products->links() }}
    </section>

@endsection

Blade usa il punto come separatore delle directory e non lo slash. Quindi il file layouts/site.blade.php verrà richiamato come layouts.site.

Il metodo links() genera la struttura HTML della paginazione dei prodotti, che è già compatibile con Bootstrap.

Torna su