⚡Introduzione a Livewire 4 — creare UI reattive senza JavaScript
Spiega come costruire UI interattive senza scrivere JavaScript usando Livewire 4, il pacchetto first-party di Laravel, dall’installazione a esempi pratici di codice.
Fino a poco tempo fa, per creare UI dinamiche in Laravel bisognava affiancare un framework JavaScript come Vue.js o React, oppure scrivere direttamente richieste AJAX.Livewire è il pacchetto per Laravel che risolve questo problema. Con solo PHP e Blade puoi costruire UI reattive. Validazione in tempo reale dei form, ricerca live, contatori e simili: funzioni che tradizionalmente richiedevano JavaScript possono essere implementate interamente in PHP.
Livewire 4 gira su Laravel 10 o superiore e PHP 8.1 o superiore. La versione più recente è Livewire 4.
Un componente Livewire è la combinazione di una classe PHP lato server e di un template Blade. Quando l’utente clicca un pulsante o compila un form, Livewire invia dietro le quinte una richiesta AJAX, esegue PHP e riflette nella pagina solo le parti modificate. Lo sviluppatore può scrivere solo in PHP senza preoccuparsi del meccanismo.
Per generare un componente Livewire c’è un comando Artisan. Proviamo a creare un semplice contatore.
php artisan make:livewire Counter
Il comando genera un componente single-file chiamato resources/views/components/⚡counter.blade.php.
Il ⚡ nel nome del file serve a identificare a colpo d’occhio un componente Livewire. Migliora la leggibilità nell’editor. Se non ti serve puoi disabilitarlo nelle impostazioni.
Modifica il file generato come segue.
<?phpuse Livewire\Component;new class extends Component { public int $count = 0; public function increment(): void { $this->count++; } public function decrement(): void { $this->count--; }};?><div> <h1>Conteggio: {{ $count }}</h1> <button wire:click="increment">+1</button> <button wire:click="decrement">-1</button></div>
Per incorporare il componente in un template Blade usa la normale sintassi dei componenti Blade.
<livewire:counter />
Ogni clic aggiorna il conteggio senza ricaricare la pagina. wire:click è il meccanismo che, al posto del JavaScript, richiama un metodo PHP.
Per impostazione predefinita wire:model si sincronizza con il server solo all’esecuzione di un’azione (invio del form, ecc.). Se vuoi sincronizzare a ogni input, aggiungi il modificatore .live.
Sintassi
Comportamento
wire:model
Sincronizza solo all’esecuzione di un’azione (invio form, ecc., predefinito)
wire:model.live
Invia una richiesta a ogni input
wire:model.blur
Sincronizza alla perdita del focus (nessuna richiesta)
Le proprietà con #[Validate] vengono validate automaticamente a ogni aggiornamento. Combinandolo con wire:model.live.blur si ottiene un’esperienza di validazione in tempo reale in cui il messaggio d’errore compare appena si perde il focus.
$this->validate() valida tutte le proprietà insieme al momento dell’invio del form. Il pattern raccomandato è usarlo in combinazione con la validazione automatica di #[Validate] a due livelli.
updated() — elaborazione dopo la modifica di una proprietà
Se vuoi eseguire qualcosa dopo l’aggiornamento di una proprietà, usa updated(). Per restringere a una proprietà specifica, includila nel nome del metodo.
<?phpuse Livewire\Component;new class extends Component { public string $username = ''; public function updatedUsername(): void { $this->username = strtolower($this->username); }};?><div> <input type="text" wire:model.live="username"> <p>Nome utente: {{ $username }}</p></div>
A ogni input il valore viene automaticamente convertito in minuscolo.
Ecco un riepilogo dei casi d’uso in cui Livewire eccelle.
Caso d’uso
Cosa realizzi con Livewire
Gestione dei form
Validazione in tempo reale e visualizzazione degli errori
Elenchi di dati
Ricerca live, ordinamento, paginazione
Contatori e toggle
Aggiornamenti UI senza ricaricare la pagina
Pannelli di amministrazione
Operazioni CRUD collegate direttamente a Eloquent
Form a wizard
Gestione degli step implementata in PHP
Se sei un ingegnere Laravel con esperienza in Blade, con Livewire puoi iniziare da subito. Il suo punto di forza è realizzare UI interattive senza il costo di apprendimento di un framework JavaScript.Quando servono interazioni molto avanzate, in stile SPA, Inertia.js è più indicato, ma per usi come form, pannelli di amministrazione o tabelle dati Livewire spesso permette un’implementazione più semplice. Prova a partire da un piccolo componente.
Documentazione ufficiale di Livewire
Per tutte le funzionalità di Livewire (file upload, paginazione, testing, ecc.) consulta la documentazione ufficiale.