Heim  >  Artikel  >  PHP-Framework  >  Teilen Sie die Serialisierungslösung für das Datum der Nachrichtenbenachrichtigung von Laravel7

Teilen Sie die Serialisierungslösung für das Datum der Nachrichtenbenachrichtigung von Laravel7

藏色散人
藏色散人nach vorne
2021-06-30 15:25:101940Durchsuche

→Empfohlen: „Laravel-Tutorial

Da die Nachrichtenbenachrichtigungsfunktion im Projekt verwendet wurde, habe ich natürlich den folgenden Code geschrieben

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

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

Ich habe jedoch festgestellt, dass das Datumsformat falsch war

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

Aber Die Modellbasisklasse verwendet das Merkmal HasDateTimeFormatter. Der Code lautet wie folgt: 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;);
    }
}

查看源代码发现 IlluminateNotificationsNotifiable 这个 trait 有两个 trait,其中
IlluminateNotificationsHasDatabaseNotificationsnotifications() 方法关联的是IlluminateNotificationsDatabaseNotification 这个类, 由于这个类是laravel 自带的, 所以serializeDate方法自然不会起作用。
找到了问题所在,那就解决吧。首先定义自己的 Notification 模型类, 继承自框架自带的 IlluminateNotificationsDatabaseNotification 类,再引用 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;);
    }
}

Sehen Sie sich den Quellcode an und stellen Sie fest, dass IlluminateNotificationsNotifiable Dieses Merkmal hat zwei Merkmale, darunter

IlluminateNotificationsHasDatabaseNotificationss notifications Die ()-Methode ist mit der Klasse IlluminateNotificationsDatabaseNotification verknüpft. Da diese Klasse mit Laravel geliefert wird, ist das serializeDate Methode wird natürlich nicht funktionieren.

Wenn Sie das Problem finden, lassen Sie es uns lösen. Definieren Sie zunächst Ihre eigene Modellklasse Notification, erben Sie von der Framework-eigenen Klasse IlluminateNotificationsDatabaseNotification und verweisen Sie dann auf das Merkmal HasDateTimeFormatter. Der Code lautet wie folgt:

rrreeeLaravel 7 消息通知日期序列化解决方案Abschließend überschreiben wir die Methode notifications() im Modell User und verwenden unser eigenes definiertes Modell Notification, um den Code zuzuordnen folgt: rrreeeProblem gelöst, der Effekt ist wie folgt:

„Verwandte Empfehlungen: Die neuesten fünf Laravel-Video-Tutorials

“ 🎜🎜🎜🎜🎜

Das obige ist der detaillierte Inhalt vonTeilen Sie die Serialisierungslösung für das Datum der Nachrichtenbenachrichtigung von Laravel7. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen