Heim > PHP-Framework > Laravel > Hauptteil

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

藏色散人
Freigeben: 2021-07-01 08:58:07
nach vorne
1946 Leute haben es durchsucht

→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);
}
Nach dem Login kopieren

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;);
    }
}
Nach dem Login kopieren

查看源代码发现 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();
    }
}
Nach dem Login kopieren

最后我们在 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;);
    }
}
Nach dem Login kopieren
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!

Verwandte Etiketten:
Quelle:learnku.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage