You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Filament v3数据库通知声音提醒实现方案咨询

Laravel Filament v3 通知声音提醒实现指南

步骤1:准备通知音频文件

  • 将你的通知音频文件(比如notification.mp3)放到项目的public/sounds目录下,若目录不存在则手动创建。

步骤2:通过Livewire事件监听实现声音播放(推荐)

Filament v3的通知通过Livewire事件filament-notifications:send触发,我们可以在后台布局中添加监听逻辑:

  1. 若未发布Filament视图文件,先执行发布命令:
php artisan vendor:publish --tag=filament-views
  1. 打开resources/views/vendor/filament/layouts/app.blade.php,在</body>标签前添加以下脚本:
<script>
    document.addEventListener('livewire:initialized', () => {
        // 监听Filament通知发送事件
        Livewire.on('filament-notifications:send', (notification) => {
            // 创建音频实例并播放
            const notificationSound = new Audio('/sounds/notification.mp3');
            notificationSound.play().catch(error => {
                console.error('通知声音播放失败:', error);
            });
        });
    });
</script>

步骤3:可选 - 仅为特定通知播放声音

如果需要控制只有部分通知触发声音,可在发送通知时附加自定义标识:

use Filament\Notifications\Notification;

// 发送带声音标识的通知
Notification::make()
    ->title('新消息提醒')
    ->body('您收到一条新的系统消息')
    ->data(['play_sound' => true]) // 自定义标识
    ->sendToDatabase(auth()->user());

然后修改监听脚本,增加判断逻辑:

Livewire.on('filament-notifications:send', (notification) => {
    // 仅当通知包含play_sound标识时播放声音
    if (notification.data?.play_sound) {
        const notificationSound = new Audio('/sounds/notification.mp3');
        notificationSound.play().catch(error => {
            console.error('通知声音播放失败:', error);
        });
    }
});

步骤4:处理浏览器自动播放限制

现代浏览器要求用户与页面有交互后才能播放音频,可添加初始化逻辑规避:
在布局文件的脚本中补充:

<script>
    let audioIsInitialized = false;

    // 用户首次交互时预加载音频
    document.addEventListener('click', () => {
        if (!audioIsInitialized) {
            new Audio('/sounds/notification.mp3').load();
            audioIsInitialized = true;
        }
    });
</script>

内容的提问来源于stack exchange,提问作者Hardik Kanajariya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 07:13:31