Спливаючі сповіщення («тости») створює клас Filament\Notifications\Notification з флюентним API:
use Filament\Actions\Action;
use Filament\Notifications\Notification;
Notification::make()
->title('Замовлення збережено')
->body('Клієнту надіслано лист з підтвердженням.')
->success()
->send();
Стан і вигляд:
success(),warning(),danger(),info()- колір та іконка;icon(),iconColor()- власна іконка;duration(5000)/seconds(5)- скільки показувати (за замовчуванням 6 секунд);persistent()- не зникати, доки користувач не закриє.
Дії в сповіщенні:
Notification::make()
->title('Імпорт завершено з помилками')
->warning()
->persistent()
->actions([
Action::make('view')
->label('Переглянути')
->button()
->url(route('imports.show', $import)),
])
->send();
Як це працює. Сповіщення записується в сесію і показується на наступному рендері. Тому його можна надіслати звідки завгодно: з дії, з контролера перед редиректом, зі звичайного Livewire-компонента. Є і JavaScript-версія: new FilamentNotification().title('...').send().
У готових діях (CreateAction, EditAction, сторінки ресурсів) сповіщення про успіх уже є - текст міняють через successNotificationTitle(), а прибирають - successNotification(null).
Пастки:
send()показує сповіщення поточному користувачу в браузері. Щоб повідомити іншого користувача чи зберегти повідомлення надовго - сповіщення в базу даних (sendToDatabase()) чи трансляція (broadcast());- заголовок може містити простий безпечний HTML. Дані користувача варто вставляти обережно - санітайзер Filament пропускає атрибути
style; - надіслане з джоби в черзі сповіщення через
send()нікого не досягне: у воркера немає сесії браузера.