laravel消息通知数据库频道中文转义问题
1. 运行环境
1). 当前使用的 Laravel 版本?
9.1
//: <> (使用 php artisan --version
命令查看)
2). 当前使用的 php/php-fpm 版本?
PHP 版本:
8.2.16
//: <> (使用 php --version
命令查看 php 版本)
php-fpm 版本:
3). 当前系统
windows 10
4). 业务环境
开发环境
//: <> (期待信息 开发环境
或 生产环境
)
//: <> (是否使用负载均衡?请提供相关信息)
5). 相关软件版本
2. 问题描述?
在laravel的消息通知中,通知类的toDatabase方法返回一个普通的PHP数组,将返回的数组转化为json数据存储在数据库中的过程似乎被laravel隐藏了,当我使用json_encode转化数据然后在toDatabase方法中尝试返回时,程序出错了,因为他不是规定返回的值(规定返回一个普通的php数组)。我希望中文字符可以不被转义而存储到数据库的notification表中,我应该怎么做?
以
database
作为渠道来发送通知时是将通知数据保存到数据库中,由于通知数据是array
类型,所以保存数据时模型会json序列化来保持数据可以正常存储。如果需要修改序列化的参数那就需要需要重写model
的asJson()
方法。由于默认的类是
Illuminate\Notifications\DatabaseNotification
位于框架代码中,而指定这个类的地方在trait
Illuminate\Notifications\Notifiable
里所以我们可以通过实现使用了
Notifiable
的模型类的routeNotificationForDatabase()
方法来达到自定义通知模型的目的。通常来说可以采用自建模型并继承
DatabaseNotification
然后重写模型的asJson()
然后在routeNotificationForDatabase
中替换成自建的模型类即可。