Advanced

Уведомления

Основы

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

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

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

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

Или через DI:

 namespaces
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();

Компонент

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

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

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

  • MoonShineNotificationContract
  • NotificationItemContract
  • NotificationButtonContract (опционально)

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

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

WebSocket

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