Maison  >  Article  >  cadre php  >  Partager la solution de sérialisation de la date de notification des messages Laravel7

Partager la solution de sérialisation de la date de notification des messages Laravel7

藏色散人
藏色散人avant
2021-06-30 15:25:101940parcourir

→Recommandé : "tutoriel laravel"

Étant donné que la fonction de notification de message est utilisée dans le projet, j'ai naturellement écrit le code suivant

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

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

Cependant, il a été constaté que le format de date était erroné

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

Mais la classe de base du modèle a utilisé le trait HasDateTimeFormatter, le code est le suivant :

<?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;);
    }
}

Affichez le code source et constatez queIlluminateNotificationsNotifiable Ce trait a deux traits, parmi lesquels la méthode
de IlluminateNotificationsHasDatabaseNotificationsnotifications() est associée à la classe IlluminateNotificationsDatabaseNotification Puisque cette classe est livrée avec Laravel, la. La méthode serializeDate ne fonctionnera naturellement pas.
Si vous trouvez le problème, résolvons-le. Définissez d'abord votre propre classe de modèle Notification, héritez de la classe IlluminateNotificationsDatabaseNotification du framework, puis référencez le trait HasDateTimeFormatter, le code est le suivant :

<?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();
    }
}

Enfin, nous remplaçons User dans le notifications() méthode modèle, utilisez notre propre Notification modèle défini pour associer, le code est le suivant :

<?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;);
    }
}

Le problème est résolu, l'effet est le suivant :

Laravel 7 消息通知日期序列化解决方案 "Recommandations associées : Les cinq derniers didacticiels vidéo Laravel

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer