Laravel - Event Handling

Hallo dort, zukünftige Laravel-Zauberer! Heute tauchen wir in die magische Welt der Event-Verarbeitung in Laravel ein. Keine Sorge, wenn du neu im Programmieren bist – ich werde dich auf dieser Reise Schritt für Schritt führen, genau wie ich es in den letzten Jahren für unzählige Schüler getan habe. Also hole dir eine Tasse deines Lieblingsgetränks und lassen uns gemeinsam diese aufregende Abenteuerreise antreten!

Laravel - Event Handling

Was sind Events in Laravel?

Stelle dir vor, du bist auf einer Party (natürlich einer Code-Party!). Wenn etwas Wichtiges passiert – wie wenn der Kuchen ankommt – wird everyone aufgeregt. In Laravel sind Events wie diese aufregenden Momente in deiner Anwendung. Sie sind besondere Vorfälle, die deine Anwendung interessieren.

Zum Beispiel, wenn ein Benutzer sich auf deiner Website registriert, das ist ein Event. Wenn eine Bestellung aufgegeben wird, das ist ein weiteres Event. Events helfen uns, unseren Code organisiert zu halten und verschiedene Teile unserer Anwendung zu ermöglichen, auf diese wichtigen Momente zu reagieren.

Warum Events verwenden?

  1. Entkoppelung: Events helfen, verschiedene Teile deiner Anwendung zu trennen. Es ist wie unterschiedliche Teams bei der Arbeit – jedes Team muss nicht alles über das andere wissen.

  2. Flexibilität: Du kannst leicht neue Reaktionen auf Events hinzufügen, ohne bestehenden Code zu ändern.

  3. Klarheit: Events machen deinen Code einfacher zu verstehen. Es ist klar, was passiert und wann.

Erstellen deines ersten Events

Lassen wir gemeinsam unser erstes Event erstellen. Wir werden ein Event erstellen, das passiert, wenn ein neuer Benutzer sich registriert. So machen wir das:

php artisan make:event NewUserRegistered

Dieser Befehl erstellt eine neue Datei in app/Events namens NewUserRegistered.php. Schauen wir uns innen an:

<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class NewUserRegistered
{
use Dispatchable, InteractsWithSockets, SerializesModels;

public $user;

public function __construct($user)
{
$this->user = $user;
}

public function broadcastOn()
{
return new PrivateChannel('channel-name');
}
}

Lass dich von all diesem Code nicht einschüchtern! Es ist wie ein Rezept – wir gehen durch jedesIngredient:

  • Die use-Anweisungen oben sind wie das Importieren von Werkzeugen, die wir brauchen könnten.
  • Unsere Event-Klasse NewUserRegistered ist, wo die Magie passiert.
  • Die $user-Eigenschaft wird Informationen über den neuen Benutzer halten.
  • Die __construct-Methode wird aufgerufen, wenn wir dieses Event erstellen, und speichert die Benutzerinformationen.

Ein Event auslösen (dispatchen)

Nun haben wir unser Event, lasst es verwenden! Wir werden dieses Event auslösen, wenn ein neuer Benutzer sich registriert. So könnten wir das in einem Controller machen:

use App\Events\NewUserRegistered;

public function register(Request $request)
{
// ... Benutzerregistrierungslogik ...

$user = User::create($request->all());

event(new NewUserRegistered($user));

return redirect('/welcome');
}

Hier, nach dem Erstellen eines neuen Benutzers, lösen wir unser Event mit der event()-Funktion aus. Es ist wie das Abschießen von Feuerwerken, um den neuen Benutzer zu feiern!

Auf Events hören

Nun erstellen wir einen Listener, der auf unser Event reagiert. Denke daran als die Person auf der Party, die Partymützen verteilt, wenn der Kuchen ankommt.

Zuerst erstellen wir einen Listener:

php artisan make:listener SendWelcomeEmail --event=NewUserRegistered

Dies erstellt eine neue Datei in app/Listeners namens SendWelcomeEmail.php. Schauen wir uns innen an:

<?php

namespace App\Listeners;

use App\Events\NewUserRegistered;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;

class SendWelcomeEmail
{
public function handle(NewUserRegistered $event)
{
// Den Benutzer über $event->user erreichen
// Logik zum Senden einer Willkommens-E-Mail hier
}
}

Die handle-Methode ist, wo wir den Code platzieren, der ausgeführt werden soll, wenn das Event occurs. In diesem Fall würden wir unsere Logik für das Senden einer Willkommens-E-Mail hier platzieren.

Event-Listener registrieren

Um unser Event mit unserem Listener zu verbinden, müssen wir sie registrieren. Öffne app/Providers/EventServiceProvider.php und füge dies zum $listen-Array hinzu:

protected $listen = [
NewUserRegistered::class => [
SendWelcomeEmail::class,
],
];

Dies sagt Laravel: "Hey, wenn NewUserRegistered passiert, führe SendWelcomeEmail aus!"

Event-Abonnenten

Manchmal möchtest du eine Klasse für mehrere Events verwenden. Das ist, wo Event-Abonnenten ins Spiel kommen. Sie sind wie der Partymacher, der für mehrere Aspekte der Party verantwortlich ist.

So erstellst du einen Event-Abonnenten:

php artisan make:listener UserEventSubscriber

Dann, in der UserEventSubscriber-Klasse:

<?php

namespace App\Listeners;

class UserEventSubscriber
{
public function handleUserRegistered($event) {}

public function handleUserLoggedIn($event) {}

public function subscribe($events)
{
$events->listen(
'App\Events\NewUserRegistered',
'App\Listeners\UserEventSubscriber@handleUserRegistered'
);

$events->listen(
'App\Events\UserLoggedIn',
'App\Listeners\UserEventSubscriber@handleUserLoggedIn'
);
}
}

Um diesen Abonnenten zu registrieren, füge ihn zur $subscribe-Eigenschaft in EventServiceProvider hinzu:

protected $subscribe = [
'App\Listeners\UserEventSubscriber',
];

Gequeued Event-Listener

Wenn dein Event-Listener etwas zeitaufwendiges macht (wie das Senden einer E-Mail), möchtest du ihn evtl. in eine Queue legen, damit er die Anwendung nicht verlangsamt. Es ist wie jemandem zu sagen: "Kannst du diese Aufgabe später erledigen, wenn du nicht so beschäftigt bist?"

Um einen Listener queuablen zu machen, implementiere das ShouldQueue-Interface:

use Illuminate\Contracts\Queue\ShouldQueue;

class SendWelcomeEmail implements ShouldQueue
{
// ...
}

Jetzt wird Laravel diesen Listener automatisch in die Queue legen!

Event-Methoden-Tabelle

Hier ist eine praktische Tabelle der Hauptmethoden, die wir mit Events verwenden:

Methode Beschreibung
event() Ein Event auslösen
listen() Einen Event-Listener registrieren
subscribe() Einen Event-Abonnenten registrieren
dispatch() Eine andere Möglichkeit, ein Event auszulösen
broadcast() Ein Event übertragen (für Echtzeit-Anwendungen)

Und das ist es, meine lieben Schüler! Wir haben gemeinsam die Welt der Laravel-Event-Verarbeitung bereist. Erinnere dich daran, Übung macht den Meister, also fürchte dich nicht, diese Konzepte in deinen eigenen Projekten auszuprobieren. Wer weiß? Vielleicht wirfst du mit deinen neuen Event-Handling-Fähigkeiten die beste Code-Party aller Zeiten!

Frohes Coden und möge deine Events stets mit Anmut und Stil behandelt werden!

Credits: Image by storyset