Skip to main content

Was sind Events?

Das Event-System von Laravel ist eine schlanke Umsetzung des Observer-Musters. Sie feuern innerhalb der Anwendung Ereignisse (Events) und definieren Listener, die darauf reagieren – Abhängigkeiten zwischen Komponenten bleiben so minimal. Wird zum Beispiel das Event „Bestellung wurde bestätigt” ausgelöst, arbeiten mehrere Listener unabhängig voneinander: „Bestätigungs-E-Mail versenden”, „Bestand reduzieren”, „Slack benachrichtigen”. Die Bestellungslogik selbst muss weder E-Mail-Versand noch Slack-Notifications kennen.
Event-Klassen liegen im Verzeichnis app/Events, Listener-Klassen in app/Listeners. Existieren die Verzeichnisse noch nicht, legen die Artisan-Befehle sie automatisch an.

Events und Listener erzeugen

Mit den Artisan-Befehlen make:event und make:listener erstellen Sie das jeweilige Grundgerüst.
Ohne Argument fragt der Befehl die Angaben interaktiv ab.

Events registrieren

Event Discovery (automatisch)

Standardmäßig durchsucht Laravel das Verzeichnis app/Listeners und registriert Listener automatisch. Die Zuordnung zu einem Event erfolgt anhand des Argumenttyps der Methode handle bzw. __invoke.
Mit PHP-Union-Types kann eine Methode auf mehrere Events reagieren.
Legen Sie Ihre Listener in ein anderes Verzeichnis, geben Sie zusätzliche Suchpfade in bootstrap/app.php an.
Mit einem Wildcard-Muster erfassen Sie mehrere Verzeichnisse in einer Angabe.
Alle registrierten Listener sehen Sie mit dem folgenden Befehl:
Cachen Sie das Listener-Manifest in der Produktion für bessere Performance. Führen Sie beim Deployment php artisan optimize oder php artisan event:cache aus. Zum Löschen des Caches verwenden Sie php artisan event:clear.

Manuelle Registrierung

Sie können Listener in der boot-Methode Ihres AppServiceProvider über die Event-Facade auch manuell registrieren.
Auch die Registrierung über eine Closure ist möglich.

Events definieren

Event-Klassen sind einfache Datenträger. Sie enthalten keine Logik, sondern halten die zum Event gehörenden Informationen als Properties.
Das Trait SerializesModels sorgt dafür, dass Eloquent-Modelle beim Serialisieren des Events für die Queue korrekt behandelt werden.

Events auslösen

Feuern Sie Events über die statische Methode dispatch oder den Helper event().
Für bedingtes Auslösen stehen ebenfalls Methoden bereit.

Auslösen nach einer Datenbanktransaktion

Möchten Sie ein Event erst nach dem Commit einer Transaktion auslösen, implementieren Sie in der Event-Klasse ShouldDispatchAfterCommit. Bei einem Rollback wird das Event verworfen.

Listener implementieren

Ein Listener empfängt das Event in der Methode handle. Abhängigkeiten im Konstruktor löst der Service Container automatisch auf.
Gibt die Methode handle false zurück, wird die Weitergabe des Events an nachfolgende Listener gestoppt.

Listener in der Queue

Zeitaufwendige Aufgaben – etwa E-Mail-Versand oder HTTP-Anfragen – können asynchron in einer Queue laufen. Es genügt, das Interface ShouldQueue zu implementieren; beim Auslösen des Events wird der Listener automatisch in die Queue gestellt.
Vor der Nutzung von queued Listenern müssen Sie die Queue konfigurieren und einen Worker starten. Details finden Sie auf der Seite Queues und Jobs.

Connection, Queue-Name und Delay anpassen

Über PHP-Attribute legen Sie Zielverbindung, Queue-Name und Verzögerung fest.
Auch dynamische Werte über Methoden sind möglich.

Anzahl Versuche und Timeout

Mit den Attributen #[Tries] und #[Timeout] steuern Sie das Verhalten bei Fehlschlägen.

Fehlerbehandlung

Definieren Sie die Methode failed, um nach überschrittener Versuchsanzahl aufzuräumen.

Event-Subscriber

Event-Subscriber fassen mehrere zusammengehörige Event-Handler in einer Klasse zusammen.

Subscriber erstellen

Aus der Methode subscribe geben Sie ein Array zurück, das Events auf Handler-Methoden abbildet.

Subscriber registrieren

Ist Event Discovery aktiv, werden Subscriber, deren subscribe-Methode ein Array zurückgibt, automatisch registriert. Für eine manuelle Registrierung nutzen Sie in der boot-Methode Ihres AppServiceProvider Event::subscribe.

Praxisbeispiel: Willkommens-E-Mail bei Registrierung senden

1

Event-Klasse erstellen

Ergänzen Sie in app/Events/UserRegistered.php eine Property für den registrierten Nutzer.
2

Listener-Klasse erstellen

Um den E-Mail-Versand asynchron über die Queue auszuführen, implementieren Sie ShouldQueue.
3

Event im Controller auslösen

Nach der Registrierung rufen Sie UserRegistered::dispatch() auf.
Der RegisterController löst nur das Event UserRegistered aus und weiß nichts vom E-Mail-Versand. Auch wenn später eine Slack-Benachrichtigung dazukommt, bleibt der Controller unverändert.
4

Worker starten

Um queued Listener zu verarbeiten, starten Sie einen Queue-Worker.
Ist Event Discovery aktiv, ist keine manuelle Registrierung im AppServiceProvider nötig. Listener in app/Listeners werden automatisch erkannt.
Mit php artisan event:list prüfen Sie die Liste registrierter Events und Listener. Kontrollieren Sie regelmäßig, ob keine unerwarteten Listener registriert sind.
Zuletzt geändert am 13. Juli 2026