Heim > Artikel > PHP-Framework > Teilen Sie die Serialisierungslösung für das Datum der Nachrichtenbenachrichtigung von Laravel7
→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
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 ?: 'Y-m-d H:i:s'); } }
查看源代码发现 IlluminateNotificationsNotifiable
这个 trait 有两个 trait,其中IlluminateNotificationsHasDatabaseNotifications
的 notifications()
方法关联的是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, 'notifiable')->orderBy('created_at', 'desc'); } }Sehen Sie sich den Quellcode an und stellen Sie fest, dass
IlluminateNotificationsNotifiable
Dieses Merkmal hat zwei Merkmale, darunter IlluminateNotificationsHasDatabaseNotifications
s 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.
Notification
, erben Sie von der Framework-eigenen Klasse IlluminateNotificationsDatabaseNotification
und verweisen Sie dann auf das Merkmal HasDateTimeFormatter
. Der Code lautet wie folgt: rrreeeAbschließ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:
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!