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 UserCreatedEventerzeugt 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.
Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.
Über uns
Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project