Skip to content

Notyfikacje ​

Moduł został zbudowany na bazie domyślnych powiadomień Laravela.

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.

php
// 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:

php
// \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.

php
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.

php
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.

php
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.

php
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ść.

php
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:

php
// 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.

php
protected static function previewData(): mixed
{
    return [
        User::factory()->make(),
    ];
}

Made by Moonbite