首頁 >php框架 >Laravel >分享Laravel7訊息通知日期序列化解決方案

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

藏色散人
藏色散人轉載
2021-06-30 15:25:101980瀏覽

→推薦:《laravel教學

由於專案中使用到了訊息通知功能,於是自然而然寫出瞭如下程式碼

public function index(Request $request)
{
    $notifications = \Auth::user()->notifications()->paginate($request->size);

    return $this->success($notifications);
}

然而發現日期格式化不對

Laravel 7 消息通知日期序列化解决方案

但是模型基底類別使用了HasDateTimeFormatter trait,程式碼如下:

<?php

namespace App\Models\Traits;

trait HasDateTimeFormatter
{
    protected function serializeDate(\DateTimeInterface $date)
    {
        return $date->format($this->dateFormat ?: &#39;Y-m-d H:i:s&#39;);
    }
}

#檢視原始程式碼發現Illuminate\Notifications\Notifiable 這個trait 有兩個trait,其中
Illuminate\Notifications\HasDatabaseNotificationsnotifications() 方法關聯的是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, &#39;notifiable&#39;)->orderBy(&#39;created_at&#39;, &#39;desc&#39;);
    }
}

問題解決,效果如下:

Laravel 7 消息通知日期序列化解决方案 《相關推薦:最新的五個Laravel影片教學》 

#

以上是分享Laravel7訊息通知日期序列化解決方案的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除