→추천: "laravel tutorial"
프로젝트에서 메시지 알림 기능을 사용하다보니 자연스럽게 다음 코드를 작성하게 되었습니다
public function index(Request $request) { $notifications = \Auth::user()->notifications()->paginate($request->size); return $this->success($notifications); }
그런데 날짜 형식이 잘못된 걸 발견했습니다
그런데 모델 기본 클래스에서 HasDateTimeFormatter
특성을 사용했으며 코드는 다음과 같습니다. 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'); } }소스 코드를 보고
IlluminateNotificationsNotifying
을 찾습니다. 이 특성에는 두 가지 특성이 있으며 그 중 IlluminateNotificationsHasDatabaseNotifications
의 알림 ()
메서드는 IlluminateNotificationsDatabaseNotification
클래스와 연결되어 있습니다. 이 클래스는 laravel과 함께 제공되므로 serializeDate
방법은 당연히 작동하지 않습니다.
IlluminateNotificationsDatabaseNotification
클래스에서 상속되는 고유한 Notification
모델 클래스를 정의한 다음 HasDateTimeFormatter
특성을 참조합니다. 코드는 다음과 같습니다. : rrreee마지막으로 User
모델의 notifications()
메서드를 재정의하고 자체 정의된 Notification
모델을 사용하여 연결합니다. rrreee문제 해결됨, 효과는 다음과 같습니다:
위 내용은 Laravel7 메시지 알림 날짜 직렬화 솔루션 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!