So verwenden Sie Laravel-Ereignisse und -Listener in Ihrer Anwendung
Laravel kommt mit mehreren coolen Features im Kern. Einige von ihnen sind Broadcasting, File Storage, Notifications, Events, etc. Jede dieser integrierten Funktionen hilft Entwicklern, gängige und komplizierte Aufgaben zu vereinfachen.
In diesem Artikel besprechen wir Laravel-Ereignisse, die es uns ermöglichen, einen Listener für bestimmte Ereignisse zu registrieren, die in der Anwendung auftreten. Mit anderen Worten, ich kann sagen, Benutzer registriert, Bestellung aufgegeben, Produkt hinzugefügt, all dies sind die Ereignisse. Und wenn Sie nach diesen Ereignissen eine Aktion auslösen müssen, können Sie Listener registrieren. Laravel ruft automatisch die Listener auf, die für bestimmte Ereignisse registriert sind.
Für unseren Artikel werde ich eine Veranstaltung zur Benutzerregistrierung implementieren. Sobald sich ein Benutzer bei der Anwendung registriert hat, sollte ihm das System eine Willkommens-E-Mail senden. Hier ist die Benutzerregistrierung das Ereignis und das Senden einer Willkommens-E-Mail ein Hörer.
Sehen wir uns jedoch an, wie Sie Ereignisse und Listener in Ihrer Laravel-Anwendung verwenden.
Registrieren von Ereignissen und Zuhörern in Laravel
Laravel bietet eine EventServiceProvider
Datei, in der Sie Ihre Ereignisse und Zuhörer registrieren müssen. In unserem Fall müssen wir ein Ereignis und einen Listener für die Benutzerregistrierung hinzufügen. Öffnen Sie also die Datei EventServiceProvider.php
und fügen Sie ein UserRegistered
Ereignis hinzu.
app/Provider/EventServiceProvider.php
...
...
class EventServiceProvider extends ServiceProvider
{
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'AppEventsUserRegistered' => [
'AppListenersSendWelcomeEmail',
],
];
Der Benutzer kann diesem Array je nach Bedarf beliebig viele Ereignisse hinzufügen. Als nächstes generieren Sie Laravel-Ereignisse, indem Sie den Befehl ausführen:
php artisan event:generate
Dieser Befehl erstellt die Verzeichnisse ‘Events’ und ‘Listeners’ im Ordner ‘app’. Im Verzeichnis ‘app/Events’ finden Sie die Datei UserRegistered.php
. Ebenso befindet sich die SendWelcomeEmail.php
Datei im Verzeichnis ‘app/Listeners’.
Definieren von Ereignissen und Listenern
Sie sind nun mit dem Boilerplate für Ihr benutzerregistriertes Ereignis fertig. Unser Ziel ist es, dem Benutzer nach der Registrierung eine Willkommens-E-Mail zu senden. Zum Versenden einer E-Mail benötigen wir ein Benutzerobjekt, das die Informationen des Benutzers enthält. Für den UserRegistered
Fall, dass ich ein Benutzerobjekt an seinen Konstruktor übergeben habe. Dieses Objekt wird dann an den Listener übergeben.
app/Events/UserRegistered.php
<?php
namespace AppEvents;
....
use AppUser;
class UserRegistered
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $user;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(User $user)
{
$this->user = $user;
}
}
Der Code, der eine E-Mail an einen Benutzer sendet, wird in die Listener-Datei eingefügt. Öffnen Sie den Listener SendWelcomeEmail
und schreiben Sie den Code wie folgt.
app/Listeners/SendWelcomeEmail.php
<?php
namespace AppListeners;
....
use Mail;
class SendWelcomeEmail
{
....
....
/**
* Handle the event.
*
* @param UserRegistered $event
* @return void
*/
public function handle(UserRegistered $event)
{
$data = array('name' => $event->user->name, 'email' => $event->user->email, 'body' => 'Welcome to our website. Hope you will enjoy our articles');
Mail::send('emails.mail', $data, function($message) use ($data) {
$message->to($data['email'])
->subject('Welcome to our Website');
$message->from('[email protected]');
});
}
}
In der obigen Datei habe ich den Code zum Senden von E-Mails in die handle
Methode der Listener-Klasse geschrieben. Dies liegt daran, dass die handle
Methode nach dem Auftreten eines Benutzerregistrierungsereignisses einen Aufruf erhält.
Ich habe auch den ersten Parameter als ’emails.mail’ in der Mail-Methode verwendet. Es bedeutet, dass Sie eine resources/views/emails/mail.blade.php
Datei erstellen sollten .
mail.blade.php
Hi <strong>{{ $name }}</strong>,
<p>{{ $body }}</p>
Rufen Sie endlich das Event auf
In dieser Phase sind Sie mit Ihrem Ereignis und Ihrem Zuhörer fertig. Der letzte Schritt ist das Aufrufen des Ereignisses von der entsprechenden Stelle. Angenommen, Sie verwenden ‘UserController’ zum Registrieren eines Benutzers. UserController
Sie können also von der aus die Veranstaltung wie folgt anrufen.
app/Http/Controllers/UserController.php
<?php
namespace AppHttpControllers;
....
use AppEventsUserRegistered;
use AppUser;
class UserController extends Controller
{
.....
.....
/**
* Store a newly created resource in storage.
*
* @param IlluminateHttpRequest $request
* @return IlluminateHttpResponse
*/
public function store(Request $request)
{
$user = User::create([
'name' => $request->input('name'),
'email' => $request->input('email'),
'password' => bcrypt($request->input('password')),
]);
// call our event here
event(new UserRegistered($user));
return $user;
}
}
Wenn sich nun ein Benutzer registriert, ruft der obige Code das Ereignis ‘UserRegistered’ auf, das schließlich den Listener aufruft. Der Listener sendet dann eine Willkommens-E-Mail an den Benutzer.
Ich hoffe, Sie verstehen, wie Sie Ereignisse und Listener in Ihrer Laravel-Anwendung verwenden. Bitte teilen Sie Ihre Gedanken und Vorschläge im Kommentarbereich unten mit.
Zum Thema passende Artikel
- So verwenden Sie Laravel Passport für die REST-API-Authentifizierung
- Senden von E-Mails über den Gmail-SMTP-Server in Laravel
- Benutzerregistrierung und Login-System in Laravel