coderello / laravel-relevance-ensurer
Laravel 相关性确保器
0.4.0
2020-09-09 08:46 UTC
Requires
- illuminate/events: 5.5.*|5.6.*|5.7.*|5.8.*|6.*|7.*|8.*
- illuminate/notifications: 5.5.*|5.6.*|5.7.*|5.8.*|6.*|7.*|8.*
- illuminate/queue: 5.5.*|5.6.*|5.7.*|5.8.*|6.*|7.*|8.*
- illuminate/support: 5.5.*|5.6.*|5.7.*|5.8.*|6.*|7.*|8.*
README
Laravel 相关性确保器提供了一种简单的方法,以避免处理变得不相关的通知和作业。
安装
您可以通过使用以下命令使用composer安装此包:
composer require coderello/laravel-relevance-ensurer
使用方法
假设我们是一个会议组织平台。我们必须在会议开始前48小时提醒所有参与者。
看起来很简单。几行代码。
$user->notify( (new MeetupReminder($meetup)) ->delay($meetup->starts_at->subHours(48)) );
但如果用户离开了会议呢?在这种情况下,我们应该防止发送通知。
这时,Laravel 相关性确保器就派上用场了。
我们唯一需要做的是在通知上实现ShouldBeRelevantNotification
契约。它包含一个公共方法isRelevant($notifiable)
,该方法应在发送之前返回表示通知相关性的布尔值。
让我们看看一个例子
<?php namespace App\Notifications; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Notification; use Illuminate\Contracts\Queue\ShouldQueue; use Coderello\RelevanceEnsurer\Contracts\ShouldBeRelevantNotification; use App\Models\Meetup; use Illuminate\Queue\SerializesModels; class MeetingReminder extends Notification implements ShouldQueue, ShouldBeRelevantNotification { use Queueable, SerializesModels; public $meetup; public function __construct(Meetup $meetup) { $this->meetup = $meetup; } public function isRelevant($notifiable): bool { return $this->meetup->users()->where('id', $notifiable)->exists(); } public function toMail($notifiable) { // returns the mail representation of the notification } }
如果通知是相关的,它将被发送,反之亦然。
对于作业也有类似的契约。唯一的区别是,ShouldBeRelevantJob的isRelevant()方法不接受任何参数。
贡献
有关详细信息,请参阅CONTRIBUTING。
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。