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

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

→推薦:《laravel教程

由于項目中使用到了消息通知功能,于是自然而然寫出了如下代碼

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

然而發(fā)現(xiàn)日期格式化不對

分享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'); ????} }

查看源代碼發(fā)現(xiàn) IlluminateNotificationsNotifiable 這個 trait 有兩個 trait,其中
IlluminateNotificationsHasDatabaseNotifications 的 notifications() 方法關(guān)聯(lián)的是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 模型來關(guān)聯(lián),代碼如下:

<?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消息通知日期序列化解決方案?《相關(guān)推薦:laravel教程》?

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊6 分享