coderello/laravel-relevance-ensurer

Laravel 相关性确保器

0.4.0 2020-09-09 08:46 UTC

This package is auto-updated.

Last update: 2024-09-09 17:30:47 UTC


README

Laravel Relevance Ensurer

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)。有关更多信息,请参阅许可证文件