1. Was sind Laravel Events und warum sollten Sie sie verwenden?
Laravel Events bieten eine leistungsstarke Möglichkeit, lose gekoppelte Komponenten in Ihrer Anwendung zu implementieren. Mit Events können Sie:
Aktionen basierend auf bestimmten Ereignissen auslösen: Zum Beispiel beim Erstellen eines neuen Benutzers, beim Hochladen einer Datei oder bei einer erfolgreichen Zahlung.
Code sauber und modular halten: Sie trennen die Verantwortlichkeiten, indem Sie die Logik in Events und Listener auslagern.
Wiederverwendbare und erweiterbare Lösungen erstellen: Ein Event kann mehrere Listener haben, und Listener können auf verschiedene Events hören.
2. Einrichten eines neuen Events und eines Listeners in Laravel
In Laravel können Sie Events und Listener auf einfache Weise mit Artisan-Befehlen generieren. Beginnen wir damit, ein neues Event und einen zugehörigen Listener zu erstellen.
Schritt 1: Erstellen eines neuen Events
Laravel bietet einen praktischen Artisan-Befehl, um ein neues Event zu erstellen. Lassen Sie uns ein Event namens UserRegistered erstellen, das ausgelöst wird, wenn sich ein neuer Benutzer registriert:
Dieser Befehl erstellt eine neue Datei im Verzeichnis app/Events:
php artisan make:event UserRegistered
// app/Events/UserRegistered.php
namespace App\Events;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class UserRegistered
{
use Dispatchable, SerializesModels;
public $user;
public function __construct($user)
{
$this->user = $user;
}
}
Info
In diesem Event haben wir eine öffentliche Eigenschaft $user hinzugefügt, um die Benutzerdaten zu speichern, wenn das Event ausgelöst wird.
Schritt 2: Erstellen eines neuen Listeners
Ein Listener führt die Aktion aus, wenn das Event ausgelöst wird. Lassen Sie uns einen Listener erstellen, der z.B. eine E-Mail sendet, wenn sich ein Benutzer registriert:
Dieser Befehl erstellt eine neue Datei im Verzeichnis app/Listeners:
php artisan make:listener SendWelcomeEmail --event=UserRegistered
// app/Listeners/SendWelcomeEmail.php
namespace App\Listeners;
use App\Events\UserRegistered;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Mail;
class SendWelcomeEmail
{
public function __construct()
{
//
}
public function handle(UserRegistered $event)
{
// Hier senden wir eine Willkommens-E-Mail
Mail::to($event->user->email)->send(new \App\Mail\WelcomeMail($event->user));
}
}
Der handle-Methodenteil des Listeners führt die Aktion aus, die Sie möchten – in diesem Fall wird eine Willkommens-E-Mail an den neuen Benutzer gesendet.
Schritt 3: Registrieren Sie das Event und den Listener
// app/Providers/EventServiceProvider.php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Event;
class EventServiceProvider extends ServiceProvider
{
protected $listen = [
'App\Events\UserRegistered' => [
'App\Listeners\SendWelcomeEmail',
],
];
}
Das war's! Jetzt weiß Laravel, dass, wenn das UserRegistered-Event ausgelöst wird, es den SendWelcomeEmail-Listener ausführen soll.
3. Auslösen des Events
Nachdem Sie das Event und den Listener eingerichtet haben, müssen wir noch das Event auslösen, um den Workflow zu testen. Das Auslösen eines Events in Laravel ist super einfach – Sie müssen nur die event()-Funktion verwenden oder die dispatch()-Methode direkt aufrufen.
Schritt 4: Event auslösen
Nehmen wir an, Sie möchten das UserRegistered-Event direkt nach der Registrierung eines neuen Benutzers in Ihrem RegisterController auslösen:
// app/Http/Controllers/Auth/RegisterController.php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use App\Models\User;
use App\Events\UserRegistered; // Importieren Sie das Event
class RegisterController extends Controller
{
protected function create(array $data)
{
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
// Event auslösen
event(new UserRegistered($user));
return $user;
}
}
Sobald der Benutzer erstellt wird, wird das UserRegistered-Event ausgelöst, und der SendWelcomeEmail-Listener wird ausgeführt, um die E-Mail zu senden.
4. Tipps und Tricks zur Arbeit mit Laravel Events
Asynchrone Verarbeitung mit Warteschlangen: Wenn Ihr Listener zeitaufwändige Aufgaben wie das Senden von E-Mails oder das Verarbeiten von Bildern ausführt, sollten Sie ihn in eine Warteschlange stellen, um die Reaktionszeit Ihrer Anwendung zu verbessern. Lassen Sie den Listener einfach die ShouldQueue-Schnittstelle implementieren:
use Illuminate\Contracts\Queue\ShouldQueue;
class SendWelcomeEmail implements ShouldQueue
{
// Listener-Code...
}
Mehrere Listener für ein Event: Sie können mehrere Listener für ein einziges Event haben. Dies ist nützlich, wenn verschiedene Aktionen als Reaktion auf dasselbe Event ausgeführt werden sollen, z.B. das Senden einer E-Mail und das Erstellen eines Log-Eintrags.
Events sind ein hervorragendes Werkzeug, um komplexe Logik sauber und modular zu halten. Mit Laravel's benutzerfreundlicher API und flexibler Architektur können Sie mühelos Ereignisse erstellen und auslösen, um Ihre Anwendung robuster und wartbarer zu gestalten.
Indem Sie die Power von Events nutzen, können Sie Ihre Anwendung besser strukturieren, effizienter machen und den Code organisierter halten. Also, warum nicht heute damit beginnen, die Kraft der Events in Laravel zu nutzen und Ihrer Anwendung eine neue Ebene von Flexibilität und Kontrolle hinzuzufügen?
"extra": {
"laravel": {
"dont-discover": []
}
}