Nachrichtenbenachrichtigung
Nachrichtenbenachrichtigung
- Einführung
- Benachrichtigung erstellen
- Benachrichtigung senden
- E-Mail-Benachrichtigung
- Markdown E-Mail-Benachrichtigung
- Daten Bibliotheksbenachrichtigungen
- Broadcast-Benachrichtigung
- SMS-Benachrichtigung
- Slack Benachrichtigungen
- Lokalisierte Benachrichtigung
- Benachrichtigungsereignis
- Benutzerdefinierter Kanal
Einführung
Zusätzlich zum Support Neben dem Versenden von E-Mails unterstützt Laravel auch das Versenden von Benachrichtigungen über verschiedene Kanäle, darunter E-Mail, SMS (über Nexmo) und Slack. Benachrichtigungen können auch in einer Datenbank gespeichert werden, um sie später auf Webseiten anzuzeigen.
Normalerweise handelt es sich bei Benachrichtigungen um kurze, informative Nachrichten, die den Benutzer über etwas informieren, das in Ihrer App passiert. Wenn Sie beispielsweise eine Online-Transaktionsanwendung schreiben, sollten Sie dem Benutzer über die Kanalklassen E-Mail und SMS eine Benachrichtigung über die Zahlung der Rechnung senden.
Benachrichtigung erstellen
Eine Benachrichtigung in Laravel ist eine Klasse (normalerweise im Ordner app/Notifications
gespeichert). Machen Sie sich keine Sorgen, wenn Sie es nicht sehen können. Führen Sie einfach den Befehl make:notification
aus, um es zu erstellen:
php artisan make:notification InvoicePaid
Dieser Befehl generiert eine neue Benachrichtigungsklasse im Verzeichnis app/Notifications
. Diese Klasse enthält die Methode via
und eine oder mehrere Nachrichtenkonstruktionsmethoden (z. B. toMail
oder toDatabase
), die die Benachrichtigung in die entsprechende Nachricht für den angegebenen Kanal umwandeln.
Benachrichtigung senden
Meldebare Eigenschaft verwenden
Benachrichtigung kann sein bestanden Es werden zwei Methoden gesendet: Notifiable
Merkmalsmethode notify
oder Notification
Fassade. Lassen Sie uns zunächst die Verwendung des Merkmals untersuchen:
<?php namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable{ use Notifiable; }
Das Standardmodell AppUser
verwendet dieses Merkmal, das eine Methode enthält, die zum Senden von Benachrichtigungen verwendet werden kann: notify
. Die Methode notify
erfordert eine Benachrichtigungsinstanz als Parameter:
use App\Notifications\InvoicePaid; $user->notify(new InvoicePaid($invoice));
{tip} Denken Sie daran, dass Sie das Merkmal
IlluminateNotificationsNotifiable
für jedes Modell verwenden können, nicht nur für das ModellUser
.
Verwenden der Benachrichtigungsfassade
Außerdem können Sie Benachrichtigungen über die Notification
-Fassade senden. Es wird hauptsächlich verwendet, wenn Sie Benachrichtigungen an mehrere Entitäten senden, die Benachrichtigungen empfangen können, z. B. beim Senden von Benachrichtigungen an eine Gruppe von Benutzern. Wenn Sie Facade zum Senden von Benachrichtigungen verwenden, müssen Sie die Instanz, die Benachrichtigungen und Benachrichtigungen empfangen kann, an die Methode send
übergeben:
Notification::send($users, new InvoicePaid($invoice));
An den angegebenen Kanal senden
Jede Benachrichtigungsklasse verfügt über eine via
-Methode, die den Kanal bestimmt, auf dem die Benachrichtigung gesendet wird. Die standardmäßig verfügbaren Kanäle sind mail
, database
, broadcast
, nexmo
und slack
.
{tip} Wenn Sie andere Kanäle wie Telegram oder Pusher nutzen möchten, können Sie sich die Community-gesteuerte Laravel-Benachrichtigungskanal-Website ansehen. Die
via
-Methode empfängt eine $notifiable
-Instanz. Diese Instanz ist die Instanz der Klasse, an die die Benachrichtigung tatsächlich gesendet wird. Mit $notifiable
können Sie entscheiden, welche Kanäle zum Versenden von Benachrichtigungen verwendet werden sollen:
/** * 获取通知发送频道。 * * @param mixed $notifiable * @return array */ public function via($notifiable){ return $notifiable->prefers_sms ? ['nexmo'] : ['mail', 'database']; }
Benachrichtigungswarteschlange
{Hinweis:} Verwendung Bevor Sie die Warteschlange benachrichtigen, müssen Sie die Warteschlange konfigurieren und eine Warteschlangenaufgabe starten.
Das Senden von Benachrichtigungen kann zeitaufwändig sein, insbesondere da Kanäle zusätzliche API-Aufrufe zum Übertragen von Benachrichtigungen erfordern. Um die Reaktionszeit der Anwendung zu beschleunigen, können Benachrichtigungen an die Warteschlange gesendet und asynchron gesendet werden. Um Push-Benachrichtigungen an die Warteschlange zu implementieren, kann die entsprechende Benachrichtigungsklasse die Schnittstelle ShouldQueue
implementieren und das Merkmal Queueable
verwenden. Wenn die Benachrichtigungsklasse über den Befehl make:notification
generiert wird, wurden die Schnittstelle und die Eigenschaft standardmäßig importiert, und Sie können sie schnell zur Benachrichtigungsklasse hinzufügen:
<?php namespace App\Notifications; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Notification; use Illuminate\Contracts\Queue\ShouldQueue; class InvoicePaid extends Notification implements ShouldQueue{ use Queueable; // ... }
ShouldQueue
Nachdem die Schnittstelle hinzugefügt wurde In der Benachrichtigungsklasse können Ihre Benachrichtigungen wie bisher normal gesendet werden und Laravel erkennt dies automatisch ShouldQueue
Die Schnittstelle schiebt die Benachrichtigung dann in die Warteschlange:
$user->notify(new InvoicePaid($invoice));
Wenn Sie das Senden der Benachrichtigung verzögern möchten, können Sie delay
nach der Benachrichtigungsinstanz hinzufügen Methode:
$when = now()->addMinutes(10); $user->notify((new InvoicePaid($invoice))->delay($when);
Benachrichtigung auf Abruf
Manchmal müssen Sie möglicherweise eine Benachrichtigung an einen Benutzer senden, der Benutzer ist jedoch nicht vorhanden Die Anwendung Um diesen Zweck zu erreichen, verwenden wir im Benutzersystem Notification::route
Die Methode gibt vor dem Senden der Benachrichtigung eine spezielle Benachrichtigungsroute an:
Notification::route('mail', 'taylor@example.com') ->route('nexmo', '5555555555') ->notify(new InvoicePaid($invoice));
E-Mail-Benachrichtigung
E-Mail-Nachricht formatieren
Wenn die Benachrichtigung das Senden per E-Mail unterstützt, müssen Sie eine definieren toMail
Methode. Diese Methode empfängt eine $notifiable
-Entität und gibt eine IlluminateNotificationsMessagesMailMessage
-Instanz zurück. E-Mail-Nachrichten können mehrere Textzeilen sowie Handlungsaufforderungen enthalten. Schauen wir uns ein Beispiel der toMail
-Methode an:
/** * 获取通知对应的邮件。 * * @param mixed $notifiable * @return \Illuminate\Notifications\Messages\MailMessage */ public function toMail($notifiable){ $url = url('/invoice/'.$this->invoice->id); return (new MailMessage) ->greeting('Hello!') ->line('One of your invoices has been paid!') ->action('View Invoice', $url) ->line('Thank you for using our application!'); }
In diesem Beispiel registrieren wir eine Begrüßung, eine Textzeile, einen Aufruf zu einer Aktion und eine weitere Textzeile.{Hinweis:} Beachten Sie, dass wir
toMail
verwendet haben kann alle Daten, die die Benachrichtigung zum Generieren der Nachricht benötigt, an den Konstruktor der Benachrichtigung übergeben.$this->invoice->id
Diese vom Objekt bereitgestellten Methoden machen das Formatieren kurzer Transaktions-E-Mails schnell und einfach. MailMessage
Kanäle verwandeln Nachrichtenkomponenten in schöne, reaktionsfähige HTML-E-Mail-Vorlagen mit Nur-Text-Kopie. Hier ist ein Beispiel für eine E-Mail, die über den Kanal mail
generiert wurde: mail
{Hinweis:} Stellen Sie beim Senden einer E-Mail-Benachrichtigung sicher, dass der Wert von
config/app.php
in der Konfigurationsdateiname
festgelegt ist. Dieser Wert wird in der E-Mail verwendet Benachrichtigungsmeldung.
Weitere Formatierungsoptionen für Benachrichtigungen
Zusätzlich zum Definieren von mehrzeiligem Text in der Benachrichtigungsklasse können Sie auch die Methode view
verwenden, um eine benutzerdefinierte Vorlage zum Rendern anzugeben Benachrichtigungs-E-Mails:
/** * 获取通知邮件。 * * @param mixed $notifiable * @return \Illuminate\Notifications\Messages\MailMessage */ public function toMail($notifiable){ return (new MailMessage)->view( 'emails.name', ['invoice' => $this->invoice] ); }
Darüber hinaus können Sie ein versandfähiges Objekt von der Methode toMail
zurückgeben :
use App\Mail\InvoicePaid as Mailable; /** * Get the mail representation of the notification. * * @param mixed $notifiable * @return Mailable */ public function toMail($notifiable){ return (new Mailable($this->invoice))->to($this->user->email); }
Fehlermeldung
Einige Benachrichtigungen informieren Benutzer über Fehlermeldungen, wie z. B. eine fehlgeschlagene Bestellungszahlung. Sie können beim Erstellen der Nachricht die Methode error
aufrufen, um anzugeben, dass es sich bei der E-Mail-Nachricht um eine Fehlermeldung handelt. Wenn Sie die error
-Methode in einer E-Mail-Nachricht verwenden, wird die Aktionsschaltfläche rot:
/** * 获取通知邮件。 * * @param mixed $notifiable * @return \Illuminate\Notifications\Message */ public function toMail($notifiable){ return (new MailMessage) ->error() ->subject('Notification Subject') ->line('...'); }
Benutzerdefinierte Empfänger
Passmail
Wenn der Kanal eine Benachrichtigung sendet, sucht das Benachrichtigungssystem automatisch nach dem Attribut email
für die benachrichtigte Entität. Sie können ein definieren routeNotificationForMail
Passen Sie an, welche E-Mail-Adresse zum Senden von Benachrichtigungen verwendet werden soll:
<?php namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable{ use Notifiable; /** * 邮件通道通知的路由。 * * @param \Illuminate\Notifications\Notification $notification * @return string */ public function routeNotificationForMail($notification) { return $this->email_address; } }
Betreff anpassen
Standardmäßig lautet der Betreff der E-Mail im Format „Titelstil“ Name der Benachrichtigungsklasse. Wenn die Benachrichtigungsklasse also InvoicePaid
heißt, lautet der Betreff der E-Mail Invoice Paid
, wenn Sie ein klares Thema für die Nachricht angeben möchten, können Sie beim Erstellen der Nachricht die Methode subject
aufrufen:
/** * 获取通知的邮件表示。 * * @param mixed $notifiable * @return \Illuminate\Notifications\Messages\MailMessage */ public function toMail($notifiable){ return (new MailMessage) ->subject('Notification Subject') ->line('...'); }
Benutzerdefinierte Vorlage
Sie können die von E-Mail-Benachrichtigungen verwendeten HTML- und Nur-Text-Vorlagen ändern, indem Sie die Ressourcen des Benachrichtigungserweiterungspakets veröffentlichen. Nach Ausführung des folgenden Befehls wird die E-Mail-Benachrichtigungsvorlage im Verzeichnis resources/views/vendor/notifications
gespeichert:
php artisan vendor:publish --tag=laravel-notifications
Markdown-E-Mail-Benachrichtigung
Markdown-E-Mail Benachrichtigung Ermöglicht Ihnen die Nutzung vorgefertigter Vorlagen für E-Mail-Benachrichtigungen und gibt Ihnen die Freiheit, längere, personalisiertere Nachrichten zu schreiben. Da diese Nachrichten im Markdown-Format geschrieben sind, kann Laravel sie auch in schöne, reaktionsfähige HTML-Vorlagen rendern und gleichzeitig automatisch reine Textkopien erstellen.
Nachricht generieren
Um eine Benachrichtigung mit der entsprechenden Markdown-Vorlage zu generieren, können Sie den Artisan-Befehl make:notification
mit --markdown
Optionen verwenden :
php artisan make:notification InvoicePaid --markdown=mail.invoice.paid
Verwenden Sie wie andere E-Mail-Benachrichtigungen Markdown Die Benachrichtigungsklasse der Vorlage muss außerdem eine toMail
-Methode definieren. Sie können jedoch die Methode markdown
anstelle der Methoden line
und action
des Konstruktors verwenden, um den Namen der zu verwendenden Markdown-Vorlage anzugeben:
/** * 获取通知的邮件表示。 * * @param mixed $notifiable * @return \Illuminate\Notifications\Messages\MailMessage */ public function toMail($notifiable){ $url = url('/invoice/'.$this->invoice->id); return (new MailMessage) ->subject('Invoice Paid') ->markdown('mail.invoice.paid', ['url' => $url]); }
Eine Nachricht schreiben
Markdown-E-Mail-Benachrichtigung verwendet Blade-Komponenten und Markdown-Syntax, sodass Sie ganz einfach Benachrichtigungen erstellen können, ohne sich von den vorgefertigten Komponenten von Laravel zu trennen:
@component('mail::message') # Invoice PaidYour invoice has been paid! @component('mail::button', ['url' => $url]) View Invoice @endcomponent Thanks,<br> {{ config('app.name') }} @endcomponent
Button-Komponente
Die Schaltflächenkomponente rendert einen zentrierten Schaltflächenlink. Diese Komponente erhält zwei Parameter, url
und optional color
. Die unterstützten Farben sind blue
, green
und red
. Sie können der Nachricht beliebig viele Schaltflächenkomponenten hinzufügen:
@component('mail::button', ['url' => $url, 'color' => 'green']) View Invoice @endcomponent
Panel-Komponente
Panel-Komponente stellt den angegebenen Textblock in einem Panel mit heller Hintergrundfarbe dar und umliegende Nachrichten werden hervorgehoben. Ideal für Textblöcke, die Aufmerksamkeit erfordern:
@component('mail::panel') This is the panel content. @endcomponent
Tabellenkomponente
Mit der Tabellenkomponente können Sie eine Markdown-Tabelle in eine HTML-Tabelle konvertieren. Als Inhalt erhält diese Komponente eine Markdown-Tabelle. Die Tabellenspaltenausrichtung unterstützt die Verwendung der standardmäßigen Markdown-Tabellenspaltenausrichtungssyntax:
@component('mail::table') | Laravel | Table | Example | | ------------- |:-------------:| --------:| | Col 2 is | Centered | | | Col 3 is | Right-Aligned | | @endcomponent
Benutzerdefinierte Komponente
Sie können alle Markdown-Benachrichtigungskomponenten in die Anwendung exportieren Um Komponenten anzupassen und zu exportieren, verwenden Sie den Artisan-Befehl vendor:publish
, um laravel-mail
zu veröffentlichen Ressourcen-Tag:
php artisan vendor:publish --tag=laravel-mail
Dieser Befehl veröffentlicht die Markdown-E-Mail-Benachrichtigungskomponente im Verzeichnis resources/views/vendor/mail
. Das Verzeichnis mail
enthält die Verzeichnisse html
und markdown
, von denen jedes alle seine gültigen Komponenten enthält. Es steht Ihnen frei, diese Komponenten nach Ihren Wünschen zu bearbeiten.
Benutzerdefiniertes CSS
Nach dem Exportieren der Komponente enthält das Verzeichnis resources/views/vendor/mail/html/themes
eine Standarddatei default.css
. Sie können das CSS in dieser Datei anpassen, um den HTML-Stil der Markdown-Benachrichtigung anzupassen wird automatisch angepasst.
{Hinweis:} Wenn Sie ein brandneues Theme für Markdown-Komponenten erstellen möchten, schreiben Sie einfach eine neue CSS-Datei in das Verzeichnis
html/themes
und ändern Sie die Optiontheme
-Konfigurationsdatei .
Datenbankbenachrichtigung
Vorkenntnisse
database
Benachrichtigungskanäle speichern Benachrichtigungsinformationen in einer Datentabelle, die Informationen wie den Benachrichtigungstyp und benutzerdefinierte JSON-Daten zur Beschreibung der Benachrichtigung enthält.
Sie können diese Datentabelle in der Benutzeroberfläche abfragen, um Benachrichtigungen anzuzeigen. Zuvor müssen Sie jedoch eine Datentabelle erstellen, um die Informationen zu speichern. Sie können den Befehl notifications:table
verwenden, um eine Migration zu generieren Datei und generieren Sie dann das entsprechende Datenblatt:
php artisan notifications:table php artisan migrate
Datenbankbenachrichtigung formatieren
Wenn die Benachrichtigung das Speichern in der Datenbanktabelle unterstützt, muss die Benachrichtigungsklasse eine toDatabase
- oder toArray
-Methode definieren. Diese Methode akzeptiert eine $notifiable
-Entität als Parameter und gibt ein natives PHP-Array zurück. Die zurückgegebenen Daten werden als JSON codiert und in der Spalte notifications
der Tabelle data
gespeichert. Schauen wir uns ein Beispiel der toArray
-Methode an:
/** * 获取通知的数组表示。 * * @param mixed $notifiable * @return array */ public function toArray($notifiable){ return [ 'invoice_id' => $this->invoice->id, 'amount' => $this->invoice->amount, ]; }
toDatabase
Vs. toArray
toArray
Die Methode kann auch den broadcast
-Kanal verwenden, um zu bestimmen, welche Daten wird an den JavaScript-Client gesendet. Wenn Sie zwei verschiedene Array-Darstellungen für die Kanäle database
und broadcast
haben, müssen Sie die Methode toDatabase
anstelle der Methode toArray
definieren.
Zugriff auf Benachrichtigungen
Sobald Benachrichtigungen in der Datenbank gespeichert sind, sind geeignete Methoden erforderlich, um von der benachrichtigenden Entität aus auf sie zuzugreifen. Das in Lareval enthaltene Standardmodell AppUser
verfügt über das Merkmal IlluminateNotificationsNotifiable
, dessen notifications
Eloquent-bezogene Methoden Entitätsbenachrichtigungen zurückgeben können. Um Benachrichtigungen zu erhalten, können Sie auf diese Methode wie auf andere Eloquent-bezogene Methoden zugreifen. Standardmäßig werden Benachrichtigungen nach created_at
Zeitstempel sortiert:
$user = App\User::find(1); foreach ($user->notifications as $notification) { echo $notification->type; }
Um nur „ungelesene“ Benachrichtigungen zu erhalten, können Sie die Zuordnungsmethode unreadNotifications
verwenden. Ebenso sind diese Benachrichtigungen nach created_at
Zeitstempel sortiert:
$user = App\User::find(1); foreach ($user->unreadNotifications as $notification) { echo $notification->type; }
{tip} Um auf Benachrichtigungen von einem JavaScript-Client zuzugreifen, müssen Sie einen Benachrichtigungscontroller für Ihre Anwendung definieren, der Benachrichtigungen für meldepflichtige Entitäten zurückgibt . Zum Beispiel der aktuelle Benutzer. HTTP-Anfragen können von einem JavaScript-Client an diesen Controller-URI gesendet werden.
Benachrichtigung als gelesen markieren
Nachdem ein Benutzer eine Benachrichtigung gelesen hat, möchte man sie häufig als „gelesen“ markieren. . Das Merkmal IlluminateNotificationsNotifiable
stellt die Methode markAsRead
bereit, die die Spalte read_at
des Benachrichtigungsdatensatzes in der Datenbank aktualisiert:
$user = App\User::find(1); foreach ($user->unreadNotifications as $notification) { $notification->markAsRead(); }
kann direkt in der Benachrichtigungskontrollsammlung markAsRead
verwendet werden Methode statt Benachrichtigungen in einer Schleife aufzurufen:
$user->unreadNotifications->markAsRead();
Sie können Finger-Update auch verwenden, um alle Benachrichtigungen als gelesen zu markieren, ohne sie aus der Datenbank zu lesen:
$user = App\User::find(1); $user->unreadNotifications()->update(['read_at' => now()]);
Sie können delete
verwenden Methode zum Löschen der gesamten Benachrichtigung aus der Tabelle:
$user->notifications()->delete();
Broadcast-Benachrichtigung
Vorläufig Wissen
Bevor Sie Benachrichtigungen senden, müssen Sie die Ereignisübertragung von Laravel konfigurieren und damit vertraut sein Aufschlag. Die Ereignisübertragung bietet dem JavaScript-Client die Möglichkeit, auf vom Server ausgelöste Laravel-Ereignisse zu reagieren.
Formatierte Broadcast-Benachrichtigungen
broadcast
kanalisiert Broadcast-Benachrichtigungen mithilfe des Event-Broadcasting-Dienstes von Laravel, der es JavaScript-Clients ermöglicht, Benachrichtigungen in Echtzeit zu erfassen. Wenn die Benachrichtigung Broadcasting unterstützt, müssen Sie die Methode toBroadcast
für die Benachrichtigungsklasse definieren. Diese Methode akzeptiert $notifiable
-Entitäten als Parameter und gibt BroadcastMessage
-Instanzen zurück. Die zurückgegebenen Daten werden als JSON codiert und an den JavaScript-Client gesendet. Schauen wir uns ein toBroadcast
Methodenbeispiel
use Illuminate\Notifications\Messages\BroadcastMessage;/** * 获取通知的可广播表示。 * * @param mixed $notifiable * @return BroadcastMessage */ public function toBroadcast($notifiable){ return new BroadcastMessage([ 'invoice_id' => $this->invoice->id, 'amount' => $this->invoice->amount, ]); }
Broadcast-Warteschlangenkonfiguration
Alle Broadcast-Benachrichtigungen werden in die Broadcast-Warteschlange gestellt. Um die Warteschlangenverbindung oder den Warteschlangennamen für Broadcast-Vorgänge zu konfigurieren, müssen Sie die Methoden BroadcastMessage
und onConnection
von onQueue
verwenden:
return (new BroadcastMessage($data)) ->onConnection('sqs') ->onQueue('broadcasts');
{tip} Zusätzlich zu den angegebenen Daten Broadcast-Benachrichtigungen enthalten auch das Feld
type
, das den Klassennamen der Benachrichtigungsklasse enthält.
Auf Benachrichtigungen warten
Benachrichtigungen werden auf dem privaten Kanal im Format {notifiable}.{id}
gesendet, wenn Sie also senden möchten eine Benachrichtigung an die 1
-Instanz mit der ID AppUser
, dann erfolgt die Benachrichtigung im privaten Kanal Senden Sie auf App.User.1
. Wenn Sie Laravel Echo verwenden, können Sie die Hilfsfunktion notification
verwenden, um ganz einfach auf Benachrichtigungen auf einem Kanal zu warten:
Echo.private('App.User.' + userId) .notification((notification) => { console.log(notification.type); });
Benutzerdefinierter Benachrichtigungskanal
Wenn Sie möchten Passen Sie die benachrichtigte Entität an, um Broadcast-Benachrichtigungen auf einem bestimmten Kanal zu erhalten. Sie können ein receivesBroadcastNotificationsOn
für die benachrichtigte Entität definieren. Methode:
<?php namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Broadcasting\PrivateChannel; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable{ use Notifiable; /** * 用户接收广播通知的通道。 * * @return string */ public function receivesBroadcastNotificationsOn() { return 'users.'.$this->id; } }
Textnachricht (SMS)-Benachrichtigung
Vorkenntnisse
Laravel basiert auf Nexmo Um SMS-Benachrichtigungen zu senden, müssen Sie vor der Verwendung von Nexmo zum Senden von Benachrichtigungen das entsprechende Composer-Abhängigkeitspaket laravel/nexmo-notification-channel
installieren:
composer require laravel/nexmo-notification-channel
Als nächstes müssen Sie es in der Konfigurationsdatei entsprechend konfigurieren config/services.php
. Sie können sich auf die folgende Beispielkonfiguration beziehen:
'nexmo' => [ 'key' => env('NEXMO_KEY'), 'secret' => env('NEXMO_SECRET'), 'sms_from' => '15556666666', ],
sms_from
Das Konfigurationselement ist die Mobiltelefonnummer, die Sie zum Senden von SMS-Nachrichten verwenden. Sie müssen eine Mobiltelefonnummer für die Anwendung im Nexmo-Kontrollfeld generieren .
Formatierte SMS-Benachrichtigung
Wenn die Benachrichtigung das Senden per SMS unterstützt, müssen Sie eine toNexmo
-Methode für die Benachrichtigungsklasse definieren. Diese Methode empfängt eine $notifiable
-Entität und gibt eine IlluminateNotificationsMessagesNexmoMessage
-Instanz zurück:
/** * Get the Nexmo / SMS representation of the notification. * * @param mixed $notifiable * @return NexmoMessage */ public function toNexmo($notifiable){ return (new NexmoMessage) ->content('Your SMS message content'); }
Unicode-Inhalt
Wenn Ihre SMS-Nachricht Unicode-Zeichen enthält, müssen Sie beim Erstellen des <🎜 <🎜 aufrufen > Instanz > Methode: NexmoMessage
/** * Get the Nexmo / SMS representation of the notification. * * @param mixed $notifiable * @return NexmoMessage */ public function toNexmo($notifiable){ return (new NexmoMessage) ->content('Your unicode message') ->unicode(); }
unicode
Wenn Sie Benachrichtigungen über eine andere Nummer als die in der Konfigurationsdatei Beim Senden einer Benachrichtigung über den Bevor Benachrichtigungen über Slack gesendet werden, muss der Slack-Benachrichtigungskanal über Composer installiert werden: Darüber hinaus müssen Sie auch einen „Incoming Webhook“ für die Slack-Gruppe konfigurieren Integriert. Die Integration stellt eine URL bereit, wenn Sie Slack-Benachrichtigungsweiterleitung durchführen. Wenn Benachrichtigungen das Senden über Slack-Nachrichten unterstützen, müssen Sie eine In diesem Beispiel senden wir einfach eine einfache Textzeile an Slack und die endgültige erstellte Nachricht lautet wie folgt: Sie können den Absender und Empfänger mithilfe der Methoden Sie können auch Bilder als Logos zum Ersetzen verwenden Emoji: Sie können Slack-Nachrichten auch „Anhänge“ hinzufügen. Im Vergleich zu einfachen Textnachrichten bieten Anhänge eine umfangreichere Formatauswahl. In diesem Beispiel senden wir eine Benachrichtigung über einen Ausnahmefehler, der in der Anwendung aufgetreten ist, einschließlich eines Links zum Anzeigen weiterer Ausnahmedetails: Der obige Code generiert die folgende Slack-Nachricht: Mit dem Anhang können Sie auch Array-Daten angeben, die dem Benutzer angezeigt werden sollen. Um die Lesbarkeit zu verbessern, wird das angegebene Array in tabellarischer Form angezeigt: Der obige Code generiert die folgende Slack-Nachricht: Wenn einige Anhangsfelder Markdown enthalten, können Sie die To route Um Slack-Benachrichtigungen an den entsprechenden Ort zu senden, müssen Sie ein Laravel ermöglicht Ihnen Benachrichtigungen werden in einer anderen Sprache als dem aktuellen Gebietsschema gesendet und das Gebietsschema wird bei der Benachrichtigung der Warteschlange gespeichert. Um dies zu erreichen, stellt die Klasse Die Lokalisierung mehrerer Benachrichtigungen ist auch über die In einigen Fällen speichert die Anwendung das bevorzugte Gebietsschema für jeden Benutzer. Durch die Implementierung des Nach der Implementierung der Schnittstelle verwendet Laravel beim Senden von Benachrichtigungen automatisch das bevorzugte Gebietsschema E-Mails an Ihr Modell einrichten. Daher ist es nicht erforderlich, die Methode Wenn die Benachrichtigung gesendet wird , löst das Benachrichtigungssystem ein {Tipp} Nachdem Sie den Listener in Im Ereignis-Listener können Sie auf die Laravel stellt uns eine Vielzahl von Benachrichtigungskanälen zur Verfügung. Aber auch der Versuch, einen benutzerdefinierten Kanaltreiber zu schreiben, um Benachrichtigungen über andere Kanäle zu senden, ist einfach. Definieren Sie zunächst eine Klasse mit der Methode Sobald die Benachrichtigungskanalklasse definiert ist, kann der Klassenname in der Anwendung über die Benutzerdefinierte „Sende“-Nummer
config/services.php
angegebene Telefonnummer senden möchten, können Sie NexmoMessage
auf der from
-Instanz verwenden Methode: /**
* Get the Nexmo / SMS representation of the notification.
*
* @param mixed $notifiable
* @return NexmoMessage
*/
public function toNexmo($notifiable){
return (new NexmoMessage)
->content('Your SMS message content')
->from('15554443333');
}
SMS-Benachrichtigungsroute
nexmo
-Kanal sucht das Benachrichtigungssystem automatisch nach der benachrichtigten Person Entität phone_number
Eigenschaften. Wenn Sie die Telefonnummer anpassen möchten, an die Benachrichtigungen gesendet werden, können Sie eine routeNotificationForNexmo
-Methode für diese Entität definieren: <?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable{
use Notifiable;
/**
* Route notifications for the Nexmo channel.
*
* @param \Illuminate\Notifications\Notification $notification
* @return string
*/
public function routeNotificationForNexmo($notification)
{
return $this->phone;
}
}
Slack Benachrichtigungen
Vorkenntnisse
composer require laravel/slack-notification-channel
Formatieren von Slack-Benachrichtigungen
toSlack
-Methode für die Benachrichtigungsklasse definieren, die Die Methode empfängt eine $notifiable
-Entität und gibt eine IlluminateNotificationsMessagesSlackMessage
-Instanz zurück, die den Textinhalt und formatierte zusätzliche Text- oder Array-Felder enthält "Anhang". Schauen wir uns ein einfaches Anwendungsbeispiel von toSlack
an: /**
* Get the Slack representation of the notification.
*
* @param mixed $notifiable
* @return SlackMessage
*/
public function toSlack($notifiable){
return (new SlackMessage)
->content('One of your invoices has been paid!');
}
Anpassen des Absenders & Empfänger
from
und to
anpassen. Die Methode from
erhält einen Benutzernamen und eine Emoji-Kennung, während die Methode to
einen Kanal oder Benutzernamen erhält: /**
* Get the Slack representation of the notification.
*
* @param mixed $notifiable
* @return SlackMessage
*/
public function toSlack($notifiable){
return (new SlackMessage)
->from('Ghost', ':ghost:')
->to('#other')
->content('This will be sent to #other');
}
/**
* Get the Slack representation of the notification.
*
* @param mixed $notifiable
* @return SlackMessage
*/
public function toSlack($notifiable){
return (new SlackMessage)
->from('Laravel')
->image('https://laravel.com/favicon.png')
->content('This will display the Laravel logo next to the message');
}
Slack-Anhänge
/**
* Get the Slack representation of the notification.
*
* @param mixed $notifiable
* @return SlackMessage
*/
public function toSlack($notifiable){
$url = url('/exceptions/'.$this->exception->id);
return (new SlackMessage)
->error()
->content('Whoops! Something went wrong.')
->attachment(function ($attachment) use ($url) {
$attachment->title('Exception: File Not Found', $url)
->content('File [background.jpg] was not found.');
});
}
/**
* Get the Slack representation of the notification.
*
* @param mixed $notifiable
* @return SlackMessage
*/
public function toSlack($notifiable){
$url = url('/invoices/'.$this->invoice->id);
return (new SlackMessage)
->success()
->content('One of your invoices has been paid!')
->attachment(function ($attachment) use ($url) {
$attachment->title('Invoice 1322', $url)
->fields([
'Title' => 'Server Expenses',
'Amount' => ',234',
'Via' => 'American Express',
'Was Overdue' => ':-1:',
]);
});
}
Markdown-Anhangsinhalt
markdown
-Methode verwenden, um Slack zu erstellen und die im Markdown-Format geschriebenen Anhangsfelder zu analysieren und anzuzeigen Zu dieser Methode gehören pretext
, text
oder fields
. Weitere Informationen zur Slack-Formatierung finden Sie in der Slack API-Dokumentation: /**
* Get the Slack representation of the notification.
*
* @param mixed $notifiable
* @return SlackMessage
*/
public function toSlack($notifiable){
$url = url('/exceptions/'.$this->exception->id);
return (new SlackMessage)
->error()
->content('Whoops! Something went wrong.')
->attachment(function ($attachment) use ($url) {
$attachment->title('Exception: File Not Found', $url)
->content('File [background.jpg] was *not found*.')
->markdown(['text']);
});
}
Slack Notification Routing
routeNotificationForSlack
für die zu benachrichtigende Entität definieren -Methode, die die Webhook-URL zurückgibt, an die die Benachrichtigung gesendet wurde. Webhook-URLs können durch Hinzufügen eines „Incoming Webhook“-Dienstes zu einer Slack-Gruppe generiert werden: <?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable{
use Notifiable;
/**
* Route notifications for the Slack channel.
*
* @param \Illuminate\Notifications\Notification $notification
* @return string
*/
public function routeNotificationForSlack($notification)
{
return 'https://hooks.slack.com/services/...';
}
}
Lokalisierte Benachrichtigungen
IlluminateNotificationsNotification
eine Methode locale
bereit, um die gewünschte Sprache festzulegen. Beim Formatieren einer Benachrichtigung wechselt die Anwendung zu dieser Spracheinstellung und kehrt nach Abschluss der Formatierung zur vorherigen Spracheinstellung zurück: $user->notify((new InvoicePaid($invoice))->locale('es'));
Notification
Fassade möglich: Notification::locale('es')->send($users, new InvoicePaid($invoice));
Bevorzugtes Gebietsschema des Benutzers
HasLocalePreference
-Vertrags auf Ihrem Modell können Sie festlegen, dass Laravel beim Senden von Benachrichtigungen die gespeicherte bevorzugte Spracheinstellung des Benutzers verwendet: use Illuminate\Contracts\Translation\HasLocalePreference;
class User extends Model implements HasLocalePreference{
/**
* Get the user's preferred locale.
*
* @return string
*/
public function preferredLocale()
{
return $this->locale;
}
}
locale
aufzurufen, wenn Sie diese Schnittstelle verwenden: $user->notify(new InvoicePaid($invoice));
Benachrichtigungsereignis
IlluminateNotificationsEventsNotificationSent
-Ereignis aus, das die zu benachrichtigende Entität (z. B. den Benutzer) und die Benachrichtigungsinstanz selbst enthält. Sie können einen Listener für dieses Ereignis in EventServiceProvider
registrieren: /**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'Illuminate\Notifications\Events\NotificationSent' => [
'App\Listeners\LogNotification',
],
];
EventServiceProvider
registriert haben, verwenden Sie den Artisan-Befehl event:generate
, um schnell die Listener-Klasse zu generieren. notifiable
, notification
und channel
des Ereignisses zugreifen Eigenschaften, um mehr über den Benachrichtigungsempfänger und die Benachrichtigung selbst zu erfahren: /**
* Handle the event.
*
* @param NotificationSent $event
* @return void
*/
public function handle(NotificationSent $event){
// $event->channel
// $event->notifiable
// $event->notification
// $event->response
}
Benutzerdefinierte Kanäle
send
, die zwei Parameter erhält: $notifiable
und $notification
:<?php
namespace App\Channels;
use Illuminate\Notifications\Notification;class VoiceChannel{
/**
* 发送指定的通知.
*
* @param mixed $notifiable
* @param \Illuminate\Notifications\Notification $notification
* @return void
*/
public function send($notifiable, Notification $notification)
{
$message = $notification->toVoice($notifiable);
// Send notification to the $notifiable instance...
}
}
via
-Methode zurückgegeben werden: <?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use App\Channels\VoiceChannel;
use App\Channels\Messages\VoiceMessage;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
class InvoicePaid extends Notification{
use Queueable;
/**
* 获取通知通道.
*
* @param mixed $notifiable
* @return array|string
*/
public function via($notifiable)
{
return [VoiceChannel::class];
}
/**
* 获取语音表示的通知.
*
* @param mixed $notifiable
* @return VoiceMessage
*/
public function toVoice($notifiable)
{
// ...
}
}