>  기사  >  PHP 프레임워크  >  Laravel7 메시지 알림 날짜 직렬화 솔루션 공유

Laravel7 메시지 알림 날짜 직렬화 솔루션 공유

藏色散人
藏色散人앞으로
2021-06-30 15:25:101940검색

→추천: "laravel tutorial"

프로젝트에서 메시지 알림 기능을 사용하다보니 자연스럽게 다음 코드를 작성하게 되었습니다

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

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

그런데 날짜 형식이 잘못된 걸 발견했습니다

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

그런데 모델 기본 클래스에서 HasDateTimeFormatter 특성을 사용했으며 코드는 다음과 같습니다. 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;);
    }
}

소스 코드를 보고 IlluminateNotificationsNotifying을 찾습니다. 이 특성에는 두 가지 특성이 있으며 그 중

IlluminateNotificationsHasDatabaseNotifications알림 () 메서드는 IlluminateNotificationsDatabaseNotification 클래스와 연결되어 있습니다. 이 클래스는 laravel과 함께 제공되므로 serializeDate 방법은 당연히 작동하지 않습니다.

문제를 찾으면 해결해 보세요. 먼저 프레임워크의 자체 IlluminateNotificationsDatabaseNotification 클래스에서 상속되는 고유한 Notification 모델 클래스를 정의한 다음 HasDateTimeFormatter 특성을 참조합니다. 코드는 다음과 같습니다. :

rrreeeLaravel 7 消息通知日期序列化解决方案마지막으로 User 모델의 notifications() 메서드를 재정의하고 자체 정의된 Notification 모델을 사용하여 연결합니다. rrreee문제 해결됨, 효과는 다음과 같습니다:

"관련 권장 사항: 최신 5개 Laravel 비디오 튜토리얼

" 🎜🎜🎜🎜🎜

위 내용은 Laravel7 메시지 알림 날짜 직렬화 솔루션 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제