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表中,我应该怎么做?
关于 LearnKu
以
database作为渠道来发送通知时是将通知数据保存到数据库中,由于通知数据是array类型,所以保存数据时模型会json序列化来保持数据可以正常存储。如果需要修改序列化的参数那就需要需要重写model的asJson()方法。由于默认的类是
Illuminate\Notifications\DatabaseNotification位于框架代码中,而指定这个类的地方在traitIlluminate\Notifications\Notifiable里所以我们可以通过实现使用了
Notifiable的模型类的routeNotificationForDatabase()方法来达到自定义通知模型的目的。通常来说可以采用自建模型并继承
DatabaseNotification然后重写模型的asJson()然后在routeNotificationForDatabase中替换成自建的模型类即可。