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.| Evento | Momento di emissione |
|---|---|
retrieved | Modello letto dal DB |
creating | Subito prima di salvare un nuovo modello |
created | Subito dopo aver salvato un nuovo modello |
updating | Subito prima di aggiornare un modello esistente |
updated | Subito dopo aver aggiornato un modello esistente |
saving | Subito prima di salvare (creazione o aggiornamento) |
saved | Subito dopo aver salvato (creazione o aggiornamento) |
deleting | Subito prima di cancellare un modello |
deleted | Subito dopo aver cancellato un modello |
trashed | Subito dopo il soft delete |
forceDeleting | Subito prima della cancellazione fisica |
forceDeleted | Subito dopo la cancellazione fisica |
restoring | Subito prima di ripristinare un soft delete |
restored | Subito dopo il ripristino di un soft delete |
replicating | Alla chiamata di replicate() |
-ing vengono emessi prima che la modifica sia persistita sul DB; quelli in -ed dopo.
Listener con closure
Per una gestione semplice degli eventi puoi registrare closure nel metodobooted del modello.
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.
Creare una classe Observer
Quando gestisci più eventi per un unico modello, raggruppare in una classe Observer è più ordinato che elencare closure.Generare la classe con Artisan
Genera lo scaffold con Viene generato
make:observer. Con l’opzione --model vengono aggiunti automaticamente i metodi corrispondenti.app/Observers/UserObserver.php.Implementare i metodi per ciascun evento
Il nome del metodo corrisponde al nome dell’evento. L’argomento è l’istanza del modello.
Registrare l'Observer sul modello
Ci sono due modi. In Laravel 13 è consigliato l’attributo Per registrare più Observer ripeti l’attributo o passa un array.Metodo 2: registrazione in
#[ObservedBy].Metodo 1: attributo #[ObservedBy] (consigliato)Basta applicare l’attributo alla classe del modello: nessuna modifica ad AppServiceProvider.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’interfacciaShouldHandleEventsAfterCommit ottieni questo comportamento.
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.
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. CongetDirty() ottieni i valori prima e dopo la modifica.
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].