Wenn du dich mit Webentwicklung befasst, ist Laravel vermutlich kein Fremdwort für dich. Laravel ist ein beliebtes PHP-Framework, das dir dabei hilft, robuste und skalierbare Webanwendungen zu erstellen. Ein essenzielles Feature, das du in modernen Webapplikationen oft benötigst, sind Benachrichtigungen. Egal ob E-Mails, SMS oder In-App-Nachrichten – Laravel bietet dir eine elegante und effiziente Möglichkeit, diese zu verschicken. In diesem Artikel erfährst du, wie du Benachrichtigungen mit Laravel verschicken kannst und welche wichtigen Fragen sich dabei stellen.
Allgemeine Infos
Laravel Notifications sind ein leistungsfähiges Feature, das dir das Versenden von Nachrichten über verschiedene Kanäle (wie E-Mail, SMS, Slack, und mehr) ermöglicht. Diese Funktionalität ist in Laravel seit Version 5.3 integriert und wird kontinuierlich weiterentwickelt.
Die Benachrichtigungen in Laravel basieren auf dem Notifiable Trait, das du in deinen Models verwenden kannst. Dieses Trait liefert die nötigen Methoden, um Benachrichtigungen zu senden. Das bedeutet, dass du Benachrichtigungen an jedes Model senden kannst, das den Notifiable Trait verwendet.
Es gibt verschiedene Kanäle, über die du Benachrichtigungen verschicken kannst:
- E-Mail: Standardmäßig unterstützt Laravel das Versenden von Benachrichtigungen per E-Mail.
- SMS: Mit Drittanbieter-Integrationen wie Nexmo oder Twilio kannst du auch SMS verschicken.
- Slack: Benachrichtigungen an Slack-Kanäle sind ebenfalls möglich.
- Datenbank: Du kannst Benachrichtigungen auch in der Datenbank speichern und später im Frontend anzeigen.
Um eine Benachrichtigung zu erstellen, nutzt du den Artisan-Befehl php artisan make:notification
. Das erstellt eine neue Benachrichtigungsklasse in deinem Projekt, die die Logik für das Senden der Nachricht enthält.
Ein weiterer Vorteil von Laravel Notifications ist die Flexibilität. Du kannst verschiedene Kanäle kombinieren oder bedingte Logik einbauen, um zu entscheiden, welcher Kanal genutzt werden soll.
Benachrichtigungsklassen erstellen
Um eine Benachrichtigung zu erstellen, musst du zuerst den Befehl php artisan make:notification
verwenden. Dieser Befehl erstellt eine neue Klasse im Verzeichnis app/Notifications
.
php artisan make:notification InvoicePaid
In dieser Klasse kannst du jetzt definieren, wie die Benachrichtigung verschickt wird. Die Methode via
gibt die Kanäle an, über die die Benachrichtigung gesendet wird. Standardmäßig kannst du hier mail
, database
, nexmo
, slack
und viele andere angeben.
public function via($notifiable)
{
return ['mail', 'database'];
}
In der toMail
Methode definierst du den Inhalt der E-Mail-Benachrichtigung. Hier kannst du das MailMessage-Objekt verwenden, um den Text und die Struktur der E-Mail zu gestalten.
public function toMail($notifiable)
{
return (new MailMessage)
->greeting('Hallo!')
->line('Ihr Invoice wurde bezahlt.')
->action('Rechnung ansehen', url('/invoices'))
->line('Danke, dass Sie unser Kunde sind!');
}
Für andere Kanäle wie SMS oder Slack gibt es ähnliche Methoden (toNexmo
, toSlack
), in denen du den Inhalt der jeweiligen Nachricht definierst.
Benachrichtigungen verschicken
Nachdem du deine Benachrichtigungsklasse erstellt und konfiguriert hast, kannst du diese Benachrichtigungen verschicken. Dafür nutzt du das notify
-Methode des Notifiable Traits.
Angenommen, du hast ein User
-Model, das den Notifiable Trait verwendet, kannst du so eine Benachrichtigung verschicken:
$user->notify(new InvoicePaid($invoice));
Laravel kümmert sich dann um den Rest und sendet die Nachricht über die in der via
Methode definierten Kanäle.
Falls du eine Benachrichtigung an mehrere Empfänger gleichzeitig senden möchtest, kannst du das Notification
-Facade verwenden:
Notification::send($users, new InvoicePaid($invoice));
Hierbei ist $users
eine Sammlung von Benutzern, die die Benachrichtigung erhalten sollen.
Ein nützliches Feature von Laravel Notifications ist die Möglichkeit, benutzerdefinierte Daten an die Benachrichtigung zu übergeben. Diese Daten kannst du im Konstruktor der Benachrichtigungsklasse übergeben und dann in den Methoden verwenden, um die Nachricht dynamisch zu gestalten.
Benachrichtigungen anpassen
Die Anpassung von Benachrichtigungen ist ein weiterer großer Vorteil von Laravel. Du kannst Benachrichtigungen auf verschiedene Arten anpassen, um den Bedürfnissen deiner Anwendung gerecht zu werden.
- Lokalisierung: Laravel bietet eingebaute Unterstützung für die Lokalisierung von Benachrichtigungen. Du kannst die Nachrichten in mehrere Sprachen übersetzen und basierend auf der Sprache des Benutzers anzeigen.
- Benutzerdefinierte Kanäle: Neben den vordefinierten Kanälen kannst du auch eigene Benachrichtigungskanäle erstellen, um spezielle Anforderungen zu erfüllen.
- Temporäre Abstimmung: Mit Laravel kannst du temporäre Abstimmungen festlegen, um zu verhindern, dass Benutzer innerhalb eines bestimmten Zeitraums mehrere Benachrichtigungen erhalten.
Ein Beispiel für die Lokalisierung einer Benachrichtigung:
public function toMail($notifiable)
{
return (new MailMessage)
->greeting(__('Hallo!'))
->line(__('Ihr Invoice wurde bezahlt.'))
->action(__('Rechnung ansehen'), url('/invoices'))
->line(__('Danke, dass Sie unser Kunde sind!'));
}
Es ist auch möglich, die Darstellung der Benachrichtigungen im Frontend anzupassen. Du kannst benutzerdefinierte Ansichten erstellen, um Benachrichtigungen auf deiner Webseite anzuzeigen.
Benachrichtigungen in der Datenbank speichern
Ein weiteres nützliches Feature ist die Möglichkeit, Benachrichtigungen in der Datenbank zu speichern. Das ist besonders praktisch, wenn du Benachrichtigungen im Frontend anzeigen möchtest.
Um Benachrichtigungen in der Datenbank zu speichern, musst du zunächst eine Migration erstellen:
php artisan notifications:table
php artisan migrate
Nun kannst du den database
Kanal in deiner via
Methode verwenden:
public function via($notifiable)
{
return ['mail', 'database'];
}
In der Methode toDatabase
kannst du die Daten definieren, die in der Datenbank gespeichert werden sollen:
public function toDatabase($notifiable)
{
return [
'invoice_id' => $this->invoice->id,
'amount' => $this->invoice->amount,
];
}
Im Frontend kannst du diese Benachrichtigungen dann abrufen und anzeigen:
$user->notifications;
Um ungelesene Benachrichtigungen abzurufen, kannst du die Methode unreadNotifications
verwenden:
$user->unreadNotifications;
Benachrichtigungen testen
Das Testen von Benachrichtigungen ist ein entscheidender Schritt, um sicherzustellen, dass deine Nachrichten korrekt und zuverlässig verschickt werden. Laravel bietet hierfür verschiedene Werkzeuge.
Mit den Fakes kannst du Benachrichtigungen einfach in deinen Tests simulieren und überprüfen, ob sie korrekt verschickt wurden.
Notification::fake();
// Aktion, die die Benachrichtigung auslöst
$user->notify(new InvoicePaid($invoice));
// Überprüfen, ob die Benachrichtigung verschickt wurde
Notification::assertSentTo(
[$user], InvoicePaid::class
);
Du kannst auch spezifizieren, dass eine Benachrichtigung über einen bestimmten Kanal verschickt wurde:
Notification::assertSentTo(
$user,
InvoicePaid::class,
function ($notification, $channels) {
return in_array('mail', $channels);
}
);
Das Testen stellt sicher, dass deine Benachrichtigungen wie erwartet funktionieren und keine Fehler auftreten. Es ist eine gute Praxis, alle wichtigen Szenarien in deinen Tests abzudecken.
Laravel Notifications bieten eine flexible und leistungsfähige Möglichkeit, Benachrichtigungen in deiner Anwendung zu verwalten. Egal ob per E-Mail, SMS, Slack oder in der Datenbank gespeichert – Laravel macht das Versenden von Nachrichten einfach und effizient. Mit den oben genannten Methoden und Tipps bist du gut gerüstet, um Benachrichtigungen in deiner Laravel-Anwendung zu implementieren und anzupassen. Probiere es aus und sieh, wie einfach und mächtig Laravel Notifications sein können!