Skip to main content

Was sind PHP-Attribute?

PHP-Attribute (PHP Attributes) sind eine native, in PHP 8.0 eingeführte Syntax für Metadaten. Sie können Klassen, Methoden, Eigenschaften oder Funktionen mit Metainformationen in der Form #[AttributeName] versehen. Laravel setzt PHP-Attribute im Framework selbst intensiv ein und ermöglicht damit die deklarative Konfiguration von Jobs und Eloquent-Modellen. In Laravel 13 (v13.2.0) akzeptieren die Queue-Attribute nun auch Enums. Anstelle klassischer Klasseneigenschaften oder Methodenüberschreibungen können Sie mit Attributen lesbaren, kompakten Code schreiben.
Attribute stehen ab PHP 8.0 zur Verfügung. Da Laravel 13 PHP 8.3 oder höher voraussetzt, können Sie Attribute in allen Umgebungen verwenden.

Queue-bezogene Attribute

Alle Attribute für Queue-Jobs liegen im Namensraum Illuminate\Queue\Attributes.

#[Queue] — Queue-Namen angeben

Gibt die Standard-Queue an, an die der Job gesendet wird.
Ab v13.2.0 kann statt einer Zeichenkette auch ein Enum übergeben werden.
Das Attribut #[Queue] ist auf Attribute::TARGET_CLASS gesetzt und kann daher nur auf Klassen angewendet werden.

#[Connection] — Verbindung angeben

Gibt die Standard-Queue-Verbindung an, die der Job nutzt.
Auch hier funktionieren Enums.

#[Backoff] — Backoff-Zeit für Retries angeben

Gibt die Wartezeit (in Sekunden) bis zum erneuten Versuch nach einem fehlgeschlagenen Job an. Mit mehreren Werten können Sie unterschiedliche Wartezeiten pro Retry setzen (variadic).
Ein Blick in die Implementierung von Backoff zeigt, dass die Klasse für variadic Argumente ausgelegt ist.
Ein einzelner Wert wird als int, mehrere Werte als array gespeichert.

#[Tries] — Anzahl der Retries angeben

Gibt die maximale Anzahl an Wiederholungsversuchen bei Fehlschlag an.

#[Timeout] — Timeout angeben

Gibt die maximale Laufzeit des Jobs (in Sekunden) an. Nach dieser Zeit wird der Job zwangsweise beendet.

#[MaxExceptions] — Anzahl erlaubter Exceptions angeben

Wird die angegebene Anzahl an Exceptions überschritten, gilt der Job als fehlgeschlagen. Wird in Kombination mit #[Tries] genutzt.

#[UniqueFor] — Eindeutigkeitsdauer angeben

Gibt die Sperrdauer (in Sekunden) an, während der ein Job nicht mehrfach ausgeführt wird. Nutzung in Kombination mit ShouldBeUnique.

#[DeleteWhenMissingModels] — bei fehlendem Modell löschen

Wenn das vom Job abhängige Eloquent-Modell nicht gefunden wird, wird der Job nicht als Fehler markiert, sondern gelöscht (übersprungen).

#[WithoutRelations] — Beziehungen ausschließen

Sorgt dafür, dass beim Serialisieren des Jobs die Model-Relationen nicht mitgeführt werden. So werden die an die Queue übertragenen Daten schlanker.

#[FailOnTimeout] — Timeout als Fehler werten

Registriert einen Timeout als Job-Fehlschlag (standardmäßig gilt ein Timeout nicht als Fehler).

Mehrere Queue-Attribute kombinieren

Sie können diese Attribute kombinieren, um das Verhalten eines Jobs deklarativ zu konfigurieren.

Eloquent-bezogene Attribute

Die Eloquent-Modell-Attribute liegen im Namensraum Illuminate\Database\Eloquent\Attributes. Laravel 13 fügt zahlreiche Attribute hinzu.

#[ScopedBy] — Global Scope angeben

Über ein Attribut geben Sie die Global-Scope-Klasse an, die automatisch auf das Modell angewendet werden soll. Vererbung wird unterstützt; über das Flag IS_REPEATABLE können mehrere Scopes angegeben werden.
Zum Zuweisen mehrerer Scopes wiederholen Sie das Attribut oder übergeben ein Array.
Zum Vergleich die klassische booted()-Methode:

#[ObservedBy] — Observer angeben

Über ein Attribut geben Sie die Observer-Klasse an, die dem Modell zugeordnet werden soll. Wie ScopedBy ist auch dieses Attribut IS_REPEATABLE.
Auch mehrere Observer können angegeben werden.
Die klassische Registrierung im AppServiceProvider entfällt.

#[UseEloquentBuilder] — eigenen Query Builder angeben

Über ein Attribut geben Sie den eigenen Eloquent-Builder an, den das Modell verwenden soll.

#[CollectedBy] — eigene Collection angeben

Über ein Attribut geben Sie die eigene Collection-Klasse an, die als Modell-Collection verwendet werden soll.

#[Table] — Tabelleneinstellungen gebündelt angeben

Sie können Tabellenname, Primärschlüssel, Timestamps und weitere tabellenbezogene Einstellungen mit einem einzigen Attribut angeben.
Die konfigurierbaren Optionen von Table sind:

#[Scope] — Methode als lokalen Scope definieren

Sie können eine Methode ohne scope-Präfix als lokalen Eloquent-Scope kennzeichnen.

#[UseFactory] — Factory-Klasse angeben

Über ein Attribut geben Sie die eigene Factory-Klasse an, die das Modell verwenden soll.

Weitere Eloquent-Attribute

Enum-Unterstützung (neu in v13.2.0)

Ab v13.2.0 akzeptieren #[Queue] und #[Connection] Enums. Damit können Sie statt String-Literalen typsichere PHP-Enums für Queues und Verbindungen verwenden.
Mit Enums vermeiden Sie Tippfehler bei Queue- und Connection-Namen und können IDE-Vervollständigung nutzen. Sehr praktisch, um Queue- und Connection-Namen anwendungsweit an einer Stelle zu verwalten.

Vergleich mit klassischen Klasseneigenschaften

Vorteile der Attribute

  • Deklarativ — das Verhalten des Jobs ist sofort am Anfang der Klasse ersichtlich
  • Typsicher — mit Enums profitieren Sie von IDE-Vervollständigung und Typprüfung
  • Vererbungsfreundlich — Attribute der Elternklasse lassen sich in Unterklassen überschreiben
  • Weniger Code — Property-Deklarationen und Method-Overrides entfallen

Nachteile der Attribute

  • Keine dynamischen Werte — die Argumente sind Compile-Time-Konstanten; Variablen oder Configwerte sind nicht möglich
  • Einarbeitung nötig — im Team kann Übung mit der Attribut-Syntax von PHP 8 erforderlich sein

Wenn dynamische Werte gebraucht werden

Sollen die Werte zur Laufzeit bestimmt werden, verwenden Sie weiterhin Methodenüberschreibungen.
Attribute werden zur PHP-Compile-Time ausgewertet. Laufzeitwerte wie config() oder env() können nicht genutzt werden. Für dynamische Konfigurationen verwenden Sie weiterhin Klasseneigenschaften oder Methoden.

Interner Aufbau

Laravel liest Attribute intern über die Reflection API aus. Beim Dispatchen eines Jobs erkennt der Trait ReadsQueueAttributes (Bestandteil von InteractsWithQueue) die Attribute per Reflection und setzt die passenden Eigenschaften.
Eloquent-Modell-Attribute werden analog dazu — etwa im Zeitpunkt von Model::booted() — per Reflection ausgelesen.

Nächste Schritte

Mittelstufe: Queues und Jobs

Lernen Sie die grundlegende Nutzung des Laravel-Queue-Systems.

PHP Reflection API

Detaillierte Erläuterung der Reflection API, mit der Laravel Attribute ausliest.
Zuletzt geändert am 13. Juli 2026