Laravel中的通知(Notifications)系统如何使用

发布时间 - 2025-11-18 00:00:00    点击率:
Laravel通知系统通过定义通知类统一发送邮件、数据库消息等,使用php artisan make:notification InvoicePaid生成类,via方法指定mail和database渠道,toMail设置邮件内容,toDatabase返回数据数组,用户模型调用notify发送,支持批量通知,数据库通知需执行notifications:table迁移,未读通知通过unreadNotifications获取并可标记为已读。

Laravel 的通知系统提供了一种简单、统一的方式来发送各种类型的消息,比如邮件、短信、数据库记录、Slack 消息等。你可以通过定义通知类来集中管理这些消息的发送逻辑,而无需在控制器中混杂发送代码。

创建通知类

使用 Artisan 命令可以快速生成一个通知类:

php artisan make:notification InvoicePaid

这会在 app/Notifications 目录下创建 InvoicePaid.php 文件。通知类中最重要的方法是 toMailtoArraytoDatabase,它们定义了不同渠道下的消息格式。

定义通知内容

以邮件和数据库为例,假设我们要在发票支付后通知用户:

class InvoicePaid extends Notification
{
    use Notifiable;

    public function via($notifiable)
    {
        return ['mail', 'database'];
    }

    public function toMail($notifiable)
    {
        return (new MailMessage)
            ->line('您的发票已支付。')
            ->action('查看发票', url('/invoice'))
            ->line('感谢您使用我们的服务!');
    }

    public function toDatabase($notifiable)
    {
        return [
            'invoice_id' => 123,
            'amount' => 500,
            'title' => '发票已支付'
        ];
    }
}

via 方法指定通知应通过哪些渠道发送。支持的频道包括:maildatabaseslackbroadcast 等。

触发通知发送

你可以通过模型实例上的 notify 方法发送通知。Laravel 默认在 User 模型中使用了 Notifiable trait,因此可以直接调用:

use App\Notifications\InvoicePaid;

$user = User::find(1);
$user->notify(new InvoicePaid);

也可以批量通知多个用户:

User::all()->each->notify(new InvoicePaid);

如果你只是想使用某个特定通道(例如只存数据库),可以用:

Notification::send($users, new InvoicePaid);

数据库通知与前端展示

若使用 database 通道,需先创建数据表保存通知:

php artisan notifications:table

然后执行迁移:

php artisan migrate

数据库中的 data 字段会存储 toDatabase 返回的数组(序列化为 JSON)。

获取未读通知:

$user->notifications;

获取未读通知:

$user->unreadNotifications;

标记为已读:

$user->unreadNotifications->markAsRead();

基本上就这些。Laravel 的通知系统结构清晰,扩展性强,适合用于解耦业务逻辑和消息发送。只需定义一次通知类,就能轻松支持多渠道输出。不复杂但容易忽略细节,比如迁移表或正确返回数组格式。


# laravel  # php  # js  # 前端  # json  # app  # ai  # mail  # class  # public  # function  # table  # database  # 数据库  # 你可以  # 已读  # 您的  # 如果你  # 就能  # 多个  # 最重要  # 可以用  # 只需  # 要在 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: iOS中将个别页面强制横屏其他页面竖屏  HTML 中动态设置元素 name 属性的正确语法详解  如何利用DOS批处理实现定时关机操作详解  Laravel Session怎么存储_Laravel Session驱动配置详解  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  深入理解Android中的xmlns:tools属性  微信小程序 canvas开发实例及注意事项  如何在阿里云虚拟主机上快速搭建个人网站?  手机软键盘弹出时影响布局的解决方法  如何确认建站备案号应放置的具体位置?  微信小程序 require机制详解及实例代码  Laravel如何处理异常和错误?(Handler示例)  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  Android实现代码画虚线边框背景效果  WEB开发之注册页面验证码倒计时代码的实现  如何快速搭建自助建站会员专属系统?  使用Dockerfile构建java web环境  高端网站建设与定制开发一站式解决方案 中企动力  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  昵图网官网入口 昵图网素材平台官方入口  html5的keygen标签为什么废弃_替代方案说明【解答】  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  怎么用AI帮你设计一套个性化的手机App图标?  Mybatis 中的insertOrUpdate操作  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  如何快速选择适合个人网站的云服务器配置?  如何快速搭建高效WAP手机网站吸引移动用户?  Laravel如何与Pusher实现实时通信?(WebSocket示例)  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  Android中AutoCompleteTextView自动提示  Swift中循环语句中的转移语句 break 和 continue  轻松掌握MySQL函数中的last_insert_id()  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  如何在IIS7上新建站点并设置安全权限?  详解jQuery中的事件  详解CentOS6.5 安装 MySQL5.1.71的方法  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  b2c电商网站制作流程,b2c水平综合的电商平台?  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  nodejs redis 发布订阅机制封装实现方法及实例代码  Swift中swift中的switch 语句  如何快速生成可下载的建站源码工具?  Laravel如何创建自定义中间件?(Middleware代码示例)