Skip to main content

Overzicht

Een Eloquent-model voert bij elke instantiatie een “opstartproces (boot)” en een “initialisatieproces (initialize)” uit. Definieer je deze methodes in een trait, dan worden ze automatisch aangeroepen zodra een model die trait use-t. Met dit mechanisme kun je traits die functionaliteit in een model injecteren netjes implementeren. Het Laravel-framework zelf gebruikt dit patroon ook in veel traits, zoals SoftDeletes.

Het verschil tussen boot en initialize


Naamgevingsconventie

bootXxx()

Definieer je een static-methode met de prefix boot gevolgd door de traitnaam, dan wordt die één keer aangeroepen bij het opstarten van het model.
Gebruik in het model:

initializeXxx()

Definieer je een instantiemethode met de prefix initialize gevolgd door de traitnaam, dan wordt die aangeroepen bij elke new van het model.
Ook bruikbaar voor dynamische toevoegingen aan $casts:

Expliciete aanduiding via PHP-attributes

Vanaf Laravel 12 kun je methodes expliciet aanwijzen met PHP-attributes, zonder afhankelijk te zijn van de naamgevingsconventie.
Met PHP-attributes is de methodenaam niet gebonden aan de traitnaam, zodat je betekenisvolle namen kunt kiezen. Je kunt ook meerdere #[Boot]- of #[Initialize]-methodes in dezelfde trait definiëren.

Praktijkvoorbeelden: toepassing in packageontwikkeling

Automatisch een globale scope toevoegen

Standaardcasts toevoegen

Automatische verwerking via Eloquent-events


Voorbeelden binnen het Laravel-framework

Het Laravel-framework zelf past dit patroon toe in veel traits. Lees deze als referentie-implementaties om het patroon beter te begrijpen.

Aandachtspunten

De modelcache legen

Omdat boot* per klasse maar één keer wordt uitgevoerd, moet je opletten in de testomgeving. Met Model::clearBootedModels() reset je de cache van geboote modellen.

Uitvoeringsvolgorde

use-t hetzelfde model meerdere traits, dan worden bootXxx() / initializeXxx() aangeroepen in de traitresolutievolgorde van PHP (declaratievolgorde). Let bij afhankelijkheden dus op de volgorde van de use-statements.

Samenvatting

Implementeer je bootXxx() / initializeXxx() in een trait, dan is het injecteren van functionaliteit in een model geregeld met één regel use. Hét standaardpatroon om vanuit een package functionaliteit aan modellen toe te voegen.
Laatst gewijzigd op 6 september 2026