info@a-coding-project.de

Laravel Events - Ereignisse schnell eingerichtet!

Was sind Events?

Events geben uns die Möglichkeit einer Laravel-Anwendung mitzuteilen, dass ein bestimmtes Ereignis (Event) eingetreten ist. Für jedes Event können wir beliebig viele Listener registrieren. Der Code im Listener wird jedes Mal bei Eintreten des Events ausgeführt.

Vorteile von Events

Events helfen dabei, Anwendungskomponenten voneinander zu entkoppeln. Eine Komponente kann die Code-Ausführung in einer anderen Komponente (dem Listener) anstoßen ohne etwas über diese wissen zu müssen. Wenn eine Anwendung für ein Event mehr als einen Listener definiert hat, wird dieser Vorteil besonders deutlich.

Beispiel

Wenn ein Admin in unserer Anwendung einen neuen User erstellt, soll dieser eine Willkommens-Email erhalten. Der Artisan Command

php artisan make:event UserCreatedEvent
erzeugt diese Datei: App\Events\UserCreatedEvent.php

Da das Event nachher noch die Email-Adresse des Users an den Listener weitergeben soll, müssen wir in UserCreatedEvent.php noch eine Variable für die User-Daten definieren.

public $userData;

/**
    * Create a new event instance.
    *
    * @return  void
    */
public function __construct($userData)
{
    $this->userData = $userData;
}
    

Das reicht bereits, um das Event in einem unserer Controller anzustoßen.

event(new UserCreatedEvent([
    'email' => $newUser->email
]));
    

Die Helper-Funktion „event“ ist global verfügbar und veröffentlicht unser Event, das wir per Parameter übergeben. Die Email-Adresse übergeben wir an den Konstruktor unseres Events.

Jetzt brauchen wir für dieses Event noch mindestens einen Listenerer, den wir mit
php artisan make:listener UserCreatedListener erstellen und der sich danach hier befindet:
App\Listeners\UserCreatedListener

In UserCreatedListener.php ist bereits die handle Methode vorhanden, die wir nur noch befüllen müssen.

public function handle(UserCreatedEvent $event)
{
    Mail::to($event->userData['email'])->send($welcome);
}
    

Im letzten Schritt müssen wir der Anwendung nur noch mitteilen, welche Listener auf welche Events reagieren sollen. Das machen wir in app\Providers\EventServiceProvider.php im $listen-Array.

protected $listen = [
    'App\Events\UserCreatedEvent' => [
        'App\Listeners\UserCreatedListener'
    ]
];
    

Wenn dann in Zukunft noch weitere Listener für dasselbe Event hinzukommen sollen, können wir diese einfach an der selben Stelle einklinken.

Laravel Entwickler gesucht?

Wir haben bereits viel Erfahrung im Umgang mit Laravel und VUE.js.
Nehmen Sie gerne unverbindlich Kontakt zu uns auf.

zum Angebot

Über uns

Stefan Wienströer

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project

Auch interessant