Skip to main content

Cosa sono gli eventi del modello

I modelli Eloquent emettono automaticamente eventi nei diversi momenti del ciclo di vita. Agganciandoti a questi eventi puoi inserire logica prima e dopo il salvataggio, la cancellazione, ecc. Gli eventi emessi da Eloquent sono i seguenti. Gli eventi che finiscono in -ing vengono emessi prima che la modifica sia persistita sul DB; quelli in -ed dopo.
Sugli aggiornamenti e le cancellazioni di massa (User::where(...)->update(...), ecc.), gli eventi saving, saved, updating, updated, deleting, deleted non vengono emessi, perché i modelli non vengono effettivamente recuperati.

Listener con closure

Per una gestione semplice degli eventi puoi registrare closure nel metodo booted del modello.
Per eseguire l’elaborazione in modo asincrono via queue, usa l’helper queueable.

Proprietà $dispatchesEvents

Se vuoi integrarti con il sistema eventi di Laravel, mappa gli eventi del modello a tue classi evento con la proprietà $dispatchesEvents.
La classe evento mappata riceve nel costruttore l’istanza del modello.

Creare una classe Observer

Quando gestisci più eventi per un unico modello, raggruppare in una classe Observer è più ordinato che elencare closure.
1

Generare la classe con Artisan

Genera lo scaffold con make:observer. Con l’opzione --model vengono aggiunti automaticamente i metodi corrispondenti.
Viene generato app/Observers/UserObserver.php.
2

Implementare i metodi per ciascun evento

Il nome del metodo corrisponde al nome dell’evento. L’argomento è l’istanza del modello.
3

Registrare l'Observer sul modello

Ci sono due modi. In Laravel 13 è consigliato l’attributo #[ObservedBy].Metodo 1: attributo #[ObservedBy] (consigliato)Basta applicare l’attributo alla classe del modello: nessuna modifica ad AppServiceProvider.
Per registrare più Observer ripeti l’attributo o passa un array.
Metodo 2: registrazione in AppServiceProviderNel metodo boot di AppServiceProvider chiami observe.
L’attributo #[ObservedBy] si trova nel namespace Illuminate\Database\Eloquent\Attributes. È sintassi nativa PHP dalla versione 8.0 ed è adottata attivamente in Laravel 13.

Observer dentro una transazione del database

Se un modello viene creato o aggiornato in una transazione, a volte vuoi che l’Observer venga eseguito dopo il commit. Implementando l’interfaccia ShouldHandleEventsAfterCommit ottieni questo comportamento.
Fuori da una transazione l’esecuzione avviene immediatamente come al solito.

Disabilitare temporaneamente gli eventi

Fermare gli eventi solo per una specifica operazione con withoutEvents

Dentro la closure passata a User::withoutEvents() non viene emesso alcun evento del modello.

Fermare gli eventi al salvataggio con saveQuietly

Per salvare un modello senza emettere eventi usa saveQuietly.
Metodi analoghi sono disponibili per cancellazione, ripristino e replica.

Casi d’uso pratici

Invalidazione automatica della cache

Quando un modello viene aggiornato o cancellato, invalidi automaticamente le cache correlate.

Registrazione di audit log

Registri automaticamente la cronologia delle modifiche. Con getDirty() ottieni i valori prima e dopo la modifica.
L’evento updating viene emesso prima del salvataggio su DB, quindi puoi ottenere i valori in procinto di essere modificati con getDirty(). Se lo chiami dopo updated, getDirty() sarà vuoto.

Aggiornamento automatico di modelli correlati

Esempio in cui, al completamento di un ordine, il magazzino viene aggiornato automaticamente.

Prossimi passi

Argomenti avanzati: attributi PHP

Impara insieme gli attributi PHP di Laravel 13, compreso #[ObservedBy].
Ultima modifica il 13 luglio 2026