ホームページ >PHPフレームワーク >Laravel >Laravel7 メッセージ通知日付シリアル化ソリューションを共有する

Laravel7 メッセージ通知日付シリアル化ソリューションを共有する

藏色散人
藏色散人転載
2021-06-30 15:25:101986ブラウズ

→推奨:「laravelチュートリアル

プロジェクト内でメッセージ通知機能を利用しているので、必然的に以下のようなコードを書きました

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

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

ただし、日付形式が間違っていることが判明しました

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

しかし、モデルの基本クラスは HasDateTimeFormatter トレイトを使用しており、コードは次のとおりです。

<?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 が見つかりました。このトレイトには 2 つのトレイトがあり、その中には
Illuminate の notifications() メソッドがあります。 \Notifications\HasDatabaseNotificationsIlluminate\Notifications\DatabaseNotification に関連付けられています。このクラスは、laravel に付属しているため、当然のことながら serializeDate メソッドは機能しません。
問題が見つかったら、解決しましょう。まず独自の Notification モデル クラスを定義し、フレームワークに付属する Illuminate\Notifications\DatabaseNotification クラスから継承してから、HasDateTimeFormatter トレイト、コードを参照します。

<?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 消息通知日期序列化解决方案 "関連する推奨事項: 最新の 5 つの Laravel ビデオ チュートリアル"

以上がLaravel7 メッセージ通知日付シリアル化ソリューションを共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。