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!
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?
-
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.
-
Flexibilität: Du kannst leicht neue Reaktionen auf Events hinzufügen, ohne bestehenden Code zu ändern.
-
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