Skip to main content

Wat is de Macroable-trait

De Macroable-trait is een mechanisme waarmee je achteraf dynamisch methodes aan een klasse kunt toevoegen zonder de klasse zelf te wijzigen. Veel coreklassen van Laravel gebruiken deze trait, zodat je functionaliteit kunt uitbreiden zonder aan de corecode te komen. De trait zelf staat in Illuminate\Support\Traits\Macroable. Intern worden geregistreerde macro’s opgeslagen in de statische property $macros en aangeroepen via de magic methods __call / __callStatic.

Klassen die Macroable gebruiken

Laravel heeft veel klassen die Macroable ondersteunen.

macro() — een methode toevoegen

Aan macro() geef je als eerste argument de methodenaam en als tweede argument een closure mee.
$this binnen de closure wordt gebonden aan de instantie die de macro aanroept. Daardoor heb je rechtstreeks toegang tot de properties en methodes van de klasse.

mixin() — meerdere methodes tegelijk toevoegen

Wil je veel macro’s in één keer registreren, dan gebruik je mixin(). Alle public / protected methodes van de mixinklasse worden als macro geregistreerd.
De methodes van een mixin() moeten de closure teruggeven die als macro wordt geregistreerd. De returnwaarde van de methode zelf wordt de implementatie van de macro.

Registreren in de service provider

Macro’s moeten worden geregistreerd bij het opstarten van de applicatie. De boot()-methode van de AppServiceProvider is daarvoor de juiste plek.

Praktische use cases

Collecties uitbreiden

Eigen methodes toevoegen aan collecties is het meest voorkomende gebruik.

De Str-klasse uitbreiden

De Request-klasse uitbreiden

Blueprint uitbreiden (migraties)

Door kolomdefinities van je schema in macro’s te bundelen, houd je een consistent databaseontwerp.

Testresponses uitbreiden

Je kunt assertion-methodes speciaal voor tests toevoegen.

hasMacro() — controleren of een macro bestaat

flushMacros() — macro’s resetten

Gebruik je wanneer je macro’s in tests wilt resetten.
flushMacros() verwijdert alle macro’s van die klasse. Soms roep je hem aan in tearDown() om tests onafhankelijk van elkaar te houden, maar let op: ook macro’s die in andere tests zijn geregistreerd verdwijnen dan.

Statische macro’s

Macro’s werken niet alleen als instantiemethodes, maar ook als statische methodes. Ze worden afgehandeld door __callStatic.

De Macroable-trait in je eigen klassen gebruiken

Je kunt Macroable ook inbouwen in klassen die je zelf hebt gemaakt.

Details van de interne implementatie

Closures worden via Closure::bindTo() aan de instantie gebonden. Daardoor wijst $this naar het object dat de macro aanroept. Bij iets anders dan een closure (zoals een invokable object) vindt geen binding plaats.
Voor IDE-ondersteuning kun je annotaties voor je macro’s definiëren in een docblock met @mixin, of met het Laravel IdeHelper-pakket automatisch een helperbestand genereren.

Volgende stap

Pipeline-patroon

Leer hoe je met het pipeline-patroon meerdere verwerkingsstappen serieel samenstelt.
Laatst gewijzigd op 6 september 2026