Advanced

Уведомления

Основы

По умолчанию MoonShine использует Laravel Database Notification, но мы используем абстракции, которые легко заменить.

Если есть необходимость добавить уведомления в центр уведомлений MoonShine, используйте класс MoonShine\Laravel\Notifications\MoonShineNotification.

Напрямую через статически метод send():

use MoonShine\Laravel\Notifications\MoonShineNotification;
use MoonShine\Laravel\Notifications\NotificationButton;
use MoonShine\Support\Enums\Color;
 
MoonShineNotification::send(
message: 'Текст уведомления',
// Необязательная кнопка
button: new NotificationButton('Нажми меня', 'https://moonshine.cutcode.dev', attributes: ['target' => '_blank']),
// Необязательные ID администраторов (по умолчанию для всех)
ids: [1,2,3],
// Необязательный цвет иконки
color: Color::GREEN,
// Необязательная иконка
icon: 'information-circle'
);

Или через DI:

use MoonShine\Laravel\Contracts\Notifications\MoonShineNotificationContract;
 
public function di(MoonShineNotificationContract $notification)
{
$notification->notify(
'Hello'
);
}

notifications notifications_dark

Настройка

Во время установки MoonShine у вас есть возможность выбрать, хотите ли вы использовать уведомления и Database Notification. Кроме того, вы можете изменить эти настройки позже через конфигурацию:

'use_notifications' => true,
'use_database_notifications' => true,
$config
->useNotifications()
->useDatabaseNotifications()
;

Компонент

Для вывода уведомлений используется компонент MoonShine\Laravel\Components\Layout\Notifications, который вы можете заменить на свой через Layout.

Кастомные уведомления

MoonShine гибкий и всё в нем можно заменить на собственные реализации, для уведомлений нужно реализовать интерфейсы:

  • MoonShine\Laravel\Contracts\Notifications\MoonShineNotificationContract
  • MoonShine\Laravel\Contracts\Notifications\NotificationItemContract
  • MoonShine\Laravel\Contracts\Notifications\NotificationButtonContract(опционально)

После в ServiceProvider заменить реализацию на собственную:

public function boot(): void
{
$this->app->singleton(
MoonShineNotificationContract::class,
MyNotificationSystem::class
);
}

WebSocket

Готовая реализация уведомлений через WebSocket реализована в пакете Rush.