logo

通知

概述

Nova 通知可让你通知 Nova 用户应用程序中的事件,如报告准备下载或需要注意的发票。Nova 通知显示在滑出菜单中,可通过 Nova 顶部导航菜单中的「铃铛」图标访问。

Notifications

发送通知

要发送通知,你只需向用户的 notify 方法发送一个 NovaNotification 实例。当然,在开始之前,你应该确保您的用户模型使用了 消息通知

Nova 通知可通过 NovaNotification 类生成,该类提供了 messageactionicontype 等便捷方法。目前支持的通知类型包括 success, error, warning, 和 info

php
use Laravel\Nova\Notifications\NovaNotification;
use Laravel\Nova\URL;

$request->user()->notify(
    NovaNotification::make()
        ->message('Your report is ready to download.')
        ->action('Download', URL::remote('https://example.com/report.pdf'))
        ->icon('download')
        ->type('info')
);

你也可以通过在通知的 via 方法返回的通道数组中包含 NovaChannel 来发送 Nova 通知:

php
use Laravel\Nova\Notifications\NovaNotification;
use Laravel\Nova\Notifications\NovaChannel;
use Laravel\Nova\URL;

/**
 * 获取通知的发送渠道
 * 
 * @param mixed $notifiable
 * @return array
 */
public function via($notifiable)
{
    return [NovaChannel::class];
}

/**
 * 获取通知的 nova 表示
 * 
 * @return array
 */
public function toNova()
{
    return (new NovaNotification)
        ->message('Your report is ready to download.')
        ->action('Download', URL::remote('https://example.com/report.pdf'))
        ->icon('download')
        ->type('info');
}

在新标签页打开远程操作 URL

定义通知操作时,可调用 openInNewTab 方法,指示 Nova 在新的浏览器标签页中打开给定的 URL:

php
->action(
    'Download', URL::remote('https://example.com/report.pdf')
)->openInNewTab()

通知图标

Nova 使用由 Steve Schoger 制作的免费 Heroicons 图标集。因此,在向 Nova 通知的 icon 方法提供图标名称时,你只需指定其中一个图标的名称即可。

禁用通知

如果你想在 Nova 内部完全禁用通知,可以从你的 App/Providers/NovaServiceProvider 中调用 withoutNotifications 方法:

php
use Laravel\Nova\Nova;

/**
 * 启动任何应用服务。
 *
 * @return void
 */
public function boot()
{
    parent::boot();

    Nova::withoutNotificationCenter();
}

启用未读通知计数

默认情况下,当通知中心内有未读通知时,Nova 会显示一个视觉指示器。 如果你希望 Nova 显示未读通知的数量,可以从你的 App/Providers/NovaServiceProvider 中调用 showUnreadCountOnNotificationCenter 方法:

php
use Laravel\Nova\Nova;

/**
 * 启动任何应用服务。
 *
 * @return void
 */
public function boot()
{
    parent::boot();

    Nova::showUnreadCountOnNotificationCenter();
}