→推薦:《laravel教學》
由於專案中使用到了訊息通知功能,於是自然而然寫出瞭如下程式碼
public function index(Request $request) { $notifications = \Auth::user()->notifications()->paginate($request->size); return $this->success($notifications); }
然而發現日期格式化不對
但是模型基底類別使用了HasDateTimeFormatter
trait,程式碼如下:
<?php namespace App\Models\Traits; trait HasDateTimeFormatter { protected function serializeDate(\DateTimeInterface $date) { return $date->format($this->dateFormat ?: 'Y-m-d H:i:s'); } }
#檢視原始程式碼發現Illuminate\Notifications\Notifiable
這個trait 有兩個trait,其中Illuminate\Notifications\HasDatabaseNotifications
的notifications()
方法關聯的是Illuminate\Notifications\DatabaseNotification
這個類別, 由於這個類別是laravel 自帶的, 所以serializeDate
方法自然不會起作用。
找到了問題所在,那就解決吧。先定義自己的Notification
模型類別, 繼承自框架自帶的Illuminate\Notifications\DatabaseNotification
類,再引用HasDateTimeFormatter
trait,程式碼如下:
<?php namespace App\Models; use App\Models\Traits\HasDateTimeFormatter; use Illuminate\Notifications\DatabaseNotification; class Notification extends DatabaseNotification { use HasDateTimeFormatter; public function notifiable() { return $this->morphTo(); } }
最後我們在User
模型中覆寫notifications()
方法,使用我們自己定義的 Notification
模型來關聯,程式碼如下:
<?php namespace App\Models; use App\Models\Traits\HasDateTimeFormatter; use Illuminate\Foundation\Auth\User as Authenticatable; use Tymon\JWTAuth\Contracts\JWTSubject; class User extends Authenticatable implements JWTSubject { use Notifiable, HasDateTimeFormatter; public function notifications() { return $this->morphMany(Notification::class, 'notifiable')->orderBy('created_at', 'desc'); } }
問題解決,效果如下:
《相關推薦:最新的五個Laravel影片教學》
#以上是分享Laravel7訊息通知日期序列化解決方案的詳細內容。更多資訊請關注PHP中文網其他相關文章!