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

 4908

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

  1. public function index(Request $request)
  2. {
  3.     $notifications = \Auth::user()->notifications()->paginate($request->size);
  4.  
  5.     return $this->success($notifications);
  6. }

然而发现日期格式化不对


60e5538b9db7e.png


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

  1. <?php
  2.  
  3. namespace App\Models\Traits;
  4.  
  5. trait HasDateTimeFormatter
  6. {
  7.     protected function serializeDate(\DateTimeInterface $date)
  8.     {
  9.         return $date->format($this->dateFormat ?: 'Y-m-d H:i:s');
  10.     }
  11. }

查看源代码发现 Illuminate\Notifications\Notifiable 这个 trait 有两个 trait,其中

Illuminate\Notifications\HasDatabaseNotifications 的 notifications() 方法关联的是Illuminate\Notifications\DatabaseNotification 这个类, 由于这个类是laravel 自带的, 所以serializeDate方法自然不会起作用。

找到了问题所在,那就解决吧。首先定义自己的 Notification 模型类, 继承自框架自带的 Illuminate\Notifications\DatabaseNotification 类,再引用 HasDateTimeFormatter trait,代码如下:

  1. <?php
  2.  
  3. namespace App\Models;
  4.  
  5. use App\Models\Traits\HasDateTimeFormatter;
  6. use Illuminate\Notifications\DatabaseNotification;
  7.  
  8. class Notification extends DatabaseNotification
  9. {
  10.     use HasDateTimeFormatter;
  11.  
  12.     public function notifiable()
  13.     {
  14.         return $this->morphTo();
  15.     }
  16. }

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

  1. <?php
  2.  
  3. namespace App\Models;
  4.  
  5. use App\Models\Traits\HasDateTimeFormatter;
  6. use Illuminate\Foundation\Auth\User as Authenticatable;
  7. use Tymon\JWTAuth\Contracts\JWTSubject;
  8.  
  9. class User extends Authenticatable implements JWTSubject
  10. {
  11.     use Notifiable, HasDateTimeFormatter;
  12.  
  13.     public function notifications()
  14.     {
  15.         return $this->morphMany(Notification::class, 'notifiable')->orderBy('created_at', 'desc');
  16.     }
  17. }

问题解决,效果如下:


60e553fe0f4c1.png


TAG标签:
本文网址:https://www.zztuku.com/index.php/detail-8996.html
站长图库 - 分享Laravel7消息通知日期序列化解决方案
申明:如有侵犯,请 联系我们 删除。

评论(0)条

您还没有登录,请 登录 后发表评论!

提示:请勿发布广告垃圾评论,否则封号处理!!

    编辑推荐

    20个服装和配饰图标矢量素材