Skip to main content

Was ist der Macroable-Trait?

Der Trait Macroable erlaubt es, einer Klasse nachträglich dynamisch Methoden hinzuzufügen, ohne sie zu verändern. Viele Kernklassen von Laravel setzen diesen Trait ein — Sie können also Funktionalität erweitern, ohne den Framework-Code selbst anzufassen. Die eigentliche Implementierung liegt in Illuminate\Support\Traits\Macroable. Intern werden registrierte Macros in der statischen Property $macros gespeichert und über die Magic Methods __call und __callStatic aufgerufen.

Klassen, die Macroable nutzen

Laravel enthält zahlreiche Klassen mit Macroable-Unterstützung.

macro() — Methode hinzufügen

Als erstes Argument von macro() übergeben Sie den Methodennamen, als zweites eine Closure.
Innerhalb der Closure ist $this an die Instanz gebunden, auf der das Macro aufgerufen wurde. Damit können Sie direkt auf Klassen-Properties und -Methoden zugreifen.

mixin() — mehrere Methoden gleichzeitig hinzufügen

Wenn Sie viele Macros gemeinsam registrieren möchten, nutzen Sie mixin(). Alle public- und protected-Methoden der Mixin-Klasse werden als Macros registriert.
Die Methoden für mixin() müssen eine Closure zurückgeben, die als Macro registriert wird. Der Rückgabewert der Methode selbst ist die eigentliche Macro-Implementierung.

Registrierung im Service Provider

Macros müssen beim Anwendungsstart registriert werden. Ein geeigneter Ort ist die Methode boot() des AppServiceProvider.

Praktische Anwendungsfälle

Erweiterung von Collections

Eigene Methoden auf Collections zu ergänzen ist der häufigste Anwendungsfall.

Erweiterung der Str-Klasse

Erweiterung der Request-Klasse

Erweiterung von Blueprint (Migrationen)

Wenn Sie Spaltendefinitionen als Macro bündeln, bleiben Ihre Datenbankdesigns konsistent.

Erweiterung der Test-Response

Sie können Test-spezifische Assertion-Methoden ergänzen.

hasMacro() — Existenz eines Macros prüfen

flushMacros() — Macros zurücksetzen

Nützlich, wenn Sie Macros in einem Test zurücksetzen möchten.
flushMacros() löscht sämtliche Macros dieser Klasse. Ein Aufruf in tearDown() isoliert Tests voneinander, entfernt aber auch Macros, die andere Tests registriert haben — Vorsicht.

Statische Macros

Macros funktionieren nicht nur als Instanzmethoden, sondern auch als statische Methoden. Verantwortlich ist __callStatic.

Macroable in eigenen Klassen nutzen

Sie können Macroable auch in Ihren eigenen Klassen einsetzen.

Details der Implementierung

Die Closure wird mittels Closure::bindTo() an die Instanz gebunden. Dadurch zeigt $this auf das Objekt, auf dem das Macro aufgerufen wurde. Andere Werte (etwa invokable Objekte) werden nicht gebunden.
Damit die IDE-Unterstützung funktioniert, definieren Sie Macro-Annotationen entweder per Docblock mit @mixin oder generieren mit dem Paket Laravel IdeHelper automatisch entsprechende Helper-Dateien.

Nächste Schritte

Pipeline-Muster

Lernen Sie, wie Sie mit dem Pipeline-Muster mehrere Verarbeitungsschritte seriell verketten.
Zuletzt geändert am 13. Juli 2026