Cos’è Livewire
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.
Panoramica del funzionamento
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.Installazione
Nella directory root dell’applicazione Laravel esegui il comando seguente.Creazione del layout
Per usarlo come componente a pagina intera è necessario un file di layout. Puoi generarlo con il comando Artisan seguente.resources/views/layouts/app.blade.php.
@livewireStyles e @livewireScripts caricano automaticamente gli asset di Livewire e Alpine.js.
Il primo componente
Per generare un componente Livewire c’è un comando Artisan. Proviamo a creare un semplice contatore.resources/views/components/⚡counter.blade.php.
Modifica il file generato come segue.
wire:click è il meccanismo che, al posto del JavaScript, richiama un metodo PHP.
Proprietà e azioni
Proprietà — wire:model
Con la direttiva wire:model puoi effettuare il binding bidirezionale tra un elemento di input e una proprietà del componente.
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.
Azioni — wire:click, wire:submit
wire:click associa un metodo all’evento click, wire:submit all’evento di invio del form.
Validazione in tempo reale
In Livewire 4 puoi definire regole di validazione direttamente sulle proprietà con l’attributo#[Validate].
#[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.Hook di ciclo di vita
Un componente Livewire ha diversi hook di ciclo di vita.mount() — inizializzazione
mount() si usa per inizializzare il componente. Sostituisce il costruttore.
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.
Integrazione con Laravel
Uso dei modelli Eloquent
Livewire può contenere direttamente modelli Eloquent nelle proprietà.Form object
Puoi mantenere semplici i componenti estraendo i form complessi in un form object.Conclusioni
Ecco un riepilogo dei casi d’uso in cui Livewire eccelle.
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.