# Notyfikacje
Moduł został zbudowany na bazie domyślnych powiadomień Laravela (opens new window).
Pozwala na stworzenie powiadomień, których treści można edytować w panelu administracyjnym.
Powiadomienie może zostać wyłączone w panelu administracyjnym.
Uwaga
Jeśli powiadomienie jest nieaktywne lub nie zostało skonfigurowane w panelu administracyjnym - powiadomienie nie zostanie wysłane.
# Definiowanie kanałów
W pierwszej kolejności należy wygenerować plik konfiguracyjny. Można to zrobić korzystając z komendy php artisan module:publish-config Notification.
Dostępne kanały powiadomień znajdują się w pliku konfiguracyjnym pod kluczem channels.
// config/notification.php
'channels' => [
'mail',
'database',
],
# Generowanie powiadomienia
Korzystając z komendy artisana php artisan mb:make-notification <Module> <NotificationName> można wygenerować plik powiadomienia dla konkretnego modułu.
# Manualne tworzenie powiadomienia
Należy stworzyć klasę, która będzie rozszerzeniem abstrakcyjnej klasy \Modules\Notification\Notifications\BaseNotification.
Następnie należy dodać metody wymagane przez interfejs \Modules\Notification\Contracts\NotificationInterface:
// \Modules\Notification\Contracts\NotificationInterface.php
public static function label(): string;
public static function variables(): array;
public function replacements(): array;
public static function channels(): void;
# Nazwa powiadomienia
Służy do wyświetlenia nazwy powiadomienia w panelu administracyjnym.
public static function label(): string
{
return __('subscriber confirmation');
}
# Metoda variables
Służy do opisania pól, które można wykorzystać w treści powiadomienia.
public static function variables(): array
{
return [
'subscriber' => [
'confirm_url' => __('confirm url'),
'delete_url' => __('delete url'),
],
];
}
# Metoda replacements
Służy do stworzenia struktury zawierającej dynamiczne dane, które będą podstawione w treści powiadomienia.
public function replacements(): array
{
return [
'subscriber' => [
'confirm_url' => $this->subscriber->frontConfirmUrl(),
'delete_url' => $this->subscriber->frontDeleteUrl(),
],
];
}
# Metoda channels
Służy do zdefiniowania kanałów powiadomienia.
use Modules\Notification\Models\ChannelField;
public static function channels(): void
{
static::addChannel('mail', __('mail'), [
ChannelField::text('subject', __('subject'), ['required', 'string']),
ChannelField::text('title', __('title'), ['required', 'string']),
ChannelField::editor('body', __('body'), ['required', 'string']),
]);
}
TIP
Walidowane są tylko pola aktywnych kanałów
# Treść powiadomienia
Treści powiadomień definiowane są osobno dla każdego kanału w odpowiednich metodach.
W przypadku kanału mail jest to metoda toMail.
W pierwszej kolejności należy skorzystać z metody prepareChannelContentFor, aby przygotować treści (podstawia wartości zmiennych w treści) dla danego kanału.
Następnie należy skorzystać z metody getContent, której pierwszym parametrem jest nazwa pola, a drugim (opcjonalnym) domyślna wartość.
use Illuminate\Support\HtmlString;
use Illuminate\Notifications\Messages\MailMessage;
public function toMail($notifiable): MailMessage
{
$this->prepareChannelContentFor($notifiable, 'mail');
return (new MailMessage)
->subject($this->getContent('subject', __('Confirm Your subscription!')))
->greeting($this->getContent('title', __('Hello')))
->line(new HtmlString($this->getContent('body')));
}
# Konfiguracja powiadomienia
Wysyłanie powiadomienia jest możliwe po odpowiedniej konfiguracji.
# Krok 1
Zdefiniowanie w pliku konfiguracyjnym dostępnego powiadomienia:
// config/notification.php
'notifications' => [
'reset-password' => ResetPasswordNotification::class,
],
# Krok 2
Utworzenie aktywnego powiadomienia w panelu administracyjnym.
# Podgląd powiadomienia
Podgląd powiadomienia dostępny jest pod linkiem: /notification/notifications/{notificationType}/preview, gdzie notificationType to klucz powiadomienia zdefiniowanego w pliku konfiguracyjnym, np. reset-password.
TIP
Domyślnie zwracany jest widok powiadomienia email. Korzystając z parametru channel, można wyświetlić dane z innego kanału.
/notification/notifications/{notificationType}/preview?channel={channel}
Jeśli powiadomienie przyjmuje jakieś parametry w konstruktorze to należy dodać statyczną metodę previewData(), która zwróci tablicę z parametrami potrzebnymi do stworzenia nowej instancji powiadomienia.
protected static function previewData(): mixed
{
return [
User::factory()->make(),
];
}
← Media Newsletter →