Wat zijn modelevents?
Een Eloquent-model vuurt automatisch events af op verschillende momenten in zijn levenscyclus. Door op deze events in te haken kun je verwerking toevoegen vóór en na het opslaan, verwijderen, enzovoort. De events die Eloquent afvuurt:
Events die eindigen op
-ing gaan af vóórdat de wijziging in de DB wordt vastgelegd; events die eindigen op -ed gaan daarna af.
Eventlisteners met closures
Wil je events simpel afhandelen, dan kun je closures registreren in debooted-methode van het model.
queueable-helper.
De property $dispatchesEvents
Wil je integreren met het eventsysteem van Laravel, dan map je modelevents met de property $dispatchesEvents naar eigen eventklassen.
Een observerklasse maken
Verwerk je meerdere events voor één model, dan is een observerklasse overzichtelijker dan een reeks closures.1
De klasse genereren met een Artisan-commando
Genereer een sjabloon met het commando Er wordt een
make:observer. Geef je met de optie --model het model op, dan worden de bijbehorende methodes automatisch toegevoegd.app/Observers/UserObserver.php gegenereerd.2
De methodes voor de events implementeren
De methodenaam komt overeen met de eventnaam. Als argument wordt de modelinstantie doorgegeven.
3
De observer registreren bij het model
Er zijn twee manieren om te registreren. In Laravel 13 heeft het Wil je meerdere observers registreren, herhaal dan het attribute of geef een array door.Manier 2: registreren in de
#[ObservedBy]-attribute de voorkeur.Manier 1: het #[ObservedBy]-attribute (aanbevolen)Alleen het attribute op de modelklasse zetten is genoeg; je hoeft de AppServiceProvider niet aan te passen.AppServiceProviderRoep observe aan in de boot-methode van de AppServiceProvider.Het
#[ObservedBy]-attribute staat in de namespace Illuminate\Database\Eloquent\Attributes. Het is native syntaxis van PHP 8.0 en later en wordt in Laravel 13 actief toegepast.Observers binnen databasetransacties
Wordt een model binnen een transactie aangemaakt of bijgewerkt, dan wil je de observer soms pas na de commit van de transactie laten draaien. Implementeer daarvoor de interfaceShouldHandleEventsAfterCommit.
Events tijdelijk uitschakelen
Alleen voor een specifieke bewerking events stoppen met withoutEvents
Binnen de closure die je doorgeeft aan User::withoutEvents() worden geen enkele modelevents afgevuurd.
Events bij het opslaan stoppen met saveQuietly
Wil je een model opslaan zonder events af te vuren, gebruik dan saveQuietly.
Praktische use cases
Automatisch de cache legen
Automatisch de gerelateerde cache legen wanneer een model wordt bijgewerkt of verwijderd.Auditlogs bijhouden
De wijzigingsgeschiedenis van een model automatisch vastleggen. MetgetDirty() haal je de gewijzigde waarden op.
Gerelateerde modellen automatisch bijwerken
Een voorbeeld dat automatisch de voorraad bijwerkt wanneer een bestelling is geplaatst.Volgende stap
Geavanceerd: PHP-attributes
Leer de PHP-attributes van Laravel 13 kennen, inclusief
#[ObservedBy].