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-Befehlenmake:event und make:listener erstellen Sie das jeweilige Grundgerüst.
Events registrieren
Event Discovery (automatisch)
Standardmäßig durchsucht Laravel das Verzeichnisapp/Listeners und registriert Listener automatisch.
Die Zuordnung zu einem Event erfolgt anhand des Argumenttyps der Methode handle bzw. __invoke.
bootstrap/app.php an.
Manuelle Registrierung
Sie können Listener in derboot-Methode Ihres AppServiceProvider über die Event-Facade auch manuell registrieren.
Events definieren
Event-Klassen sind einfache Datenträger. Sie enthalten keine Logik, sondern halten die zum Event gehörenden Informationen als Properties.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 Methodedispatch oder den Helper event().
Auslösen nach einer Datenbanktransaktion
Möchten Sie ein Event erst nach dem Commit einer Transaktion auslösen, implementieren Sie in der Event-KlasseShouldDispatchAfterCommit.
Bei einem Rollback wird das Event verworfen.
Listener implementieren
Ein Listener empfängt das Event in der Methodehandle.
Abhängigkeiten im Konstruktor löst der Service Container automatisch auf.
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 InterfaceShouldQueue 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.Anzahl Versuche und Timeout
Mit den Attributen#[Tries] und #[Timeout] steuern Sie das Verhalten bei Fehlschlägen.
Fehlerbehandlung
Definieren Sie die Methodefailed, um nach überschrittener Versuchsanzahl aufzuräumen.
Event-Subscriber
Event-Subscriber fassen mehrere zusammengehörige Event-Handler in einer Klasse zusammen.Subscriber erstellen
Aus der Methodesubscribe geben Sie ein Array zurück, das Events auf Handler-Methoden abbildet.
Subscriber registrieren
Ist Event Discovery aktiv, werden Subscriber, derensubscribe-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
app/Events/UserRegistered.php eine Property für den registrierten Nutzer.2
Listener-Klasse erstellen
ShouldQueue.3
Event im Controller auslösen
Nach der Registrierung rufen Sie Der
UserRegistered::dispatch() auf.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.