首頁 > php框架 > Laravel > 主體

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

藏色散人
發布: 2021-07-01 08:58:07
轉載
1946 人瀏覽過

→推薦:《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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板