分享Laravel7消息通知日期序列化解决方案

                                                                               

→推荐:《laravel教程

由于项目中使用到了消息通知功能,于是自然而然写出了如下代码

public function index(Request $request) {     $notifications = Auth::user()->notifications()->paginate($request->size);      return $this->success($notifications); }

然而发现日期格式化不对

分享Laravel7消息通知日期序列化解决方案

但是模型基类使用了 HasDateTimeFormatter trait, 代码如下:

<?php namespace AppModelsTraits;  trait HasDateTimeFormatter {     protected function serializeDate(DateTimeInterface $date)     {         return $date->format($this-&gt;dateFormat ?: 'Y-m-d H:i:s');     } }

查看源代码发现 IlluminateNotificationsNotifiable 这个 trait 有两个 trait,其中
IlluminateNotificationsHasDatabaseNotifications 的 notifications() 方法关联的是IlluminateNotificationsDatabaseNotification 这个类, 由于这个类是laravel 自带的, 所以serializeDate方法自然不会起作用。
找到了问题所在,那就解决吧。首先定义自己的 Notification 模型类, 继承自框架自带的 IlluminateNotificationsDatabaseNotification 类,再引用 HasDateTimeFormatter trait,代码如下:

<?php namespace AppModels;  use AppModelsTraitsHasDateTimeFormatter; use IlluminateNotificationsDatabaseNotification;  class Notification extends DatabaseNotification {     use HasDateTimeFormatter;      public function notifiable()     {         return $this->morphTo();     } }

最后我们在 User 模型中覆盖 notifications() 方法,使用我们自己定义的    Notification 模型来关联,代码如下:

<?php namespace AppModels;  use AppModelsTraitsHasDateTimeFormatter; use IlluminateFoundationAuthUser as Authenticatable; use TymonJWTAuthContractsJWTSubject;  class User extends Authenticatable implements JWTSubject {     use Notifiable, HasDateTimeFormatter;      public function notifications()     {         return $this->morphMany(Notification::class, 'notifiable')-&gt;orderBy('created_at', 'desc');     } }

问题解决,效果如下:

分享Laravel7消息通知日期序列化解决方案 《相关推荐:laravel教程》 

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享