digitalcloud / advanced-notifications
v0.1
2019-01-13 13:25 UTC
Requires
- php: >=7.1.0
This package is auto-updated.
Last update: 2024-08-29 04:54:34 UTC
README
此包允许您在数据库中管理系统通知。
描述
当与处理大量客户的系统一起工作时,通知管理变得相当复杂,一个通知管理工具将很有用。在这里,我们介绍了一个强大的工具,允许您管理系统的通知。我们提供API,以便在多个级别上启用和禁用通知,如下所示
- 您可以全局禁用通知,因此系统将不再发送此类通知。
- 您可以全局禁用通知通道,因此系统将不再通过此通道发送通知。
- 您可以禁用特定通知对象在特定通知和/或通道上的通知。
安装
您可以通过composer安装此包
composer require digitalcloud/advanced-notifications
在Laravel 5.5中,服务提供程序将自动注册。在框架的旧版本中,只需将服务提供程序添加到config/app.php文件中即可
'providers' => [ DigitalCloud\AdvancedNotifications\AdvancedNotificationsServiceProvider::class, ];
您可以使用以下命令发布迁移
php artisan vendor:publish --provider="DigitalCloud\AdvancedNotifications\AdvancedNotificationsServiceProvider" --tag="migrations"
迁移发布后,您可以通过运行迁移来创建高级通知表
php artisan migrate
安装后,您可以进行如下操作
// disable/enable all notifications for specific channel AdvancedNotifications::setChannelStatus('database', false); // true to enable // get specific channel status $channelStatus = AdvancedNotifications::getChannelStatus('database'); // disable/enable a specific notification globally- for all users. AdvancedNotifications::setNotificationStatus(InvoicePaid::class, false); // true to enable // get a specific notification status $notificationStatus = AdvancedNotifications::getNotificationStatus(InvoicePaid::class); // disable/enable a specific notification for a specific notifiable. $notifiable = \App\User::find(1); AdvancedNotifications::setNotificationStatusForNotifiable(InvoicePaid::class, $notifiable, false); // true to enable // get a specific notification status for a specific notifiable. $notificationStatusForNotifiable = AdvancedNotifications::getNotificationStatusForNotifiable(InvoicePaid::class, $notifiable); // disable/enable a specific channel for a specific notifiable. AdvancedNotifications::setChannelStatusForNotifiable('database', $notifiable, false); // true to enable // get a specific channel status for a specific notifiable. $channelStatusForNotifiable = AdvancedNotifications::getChannelStatusForNotifiable('database', $notifiable);
此包将尊重每个通道、通知和可通知对象的状态,它将在实际发送通知之前测试这些类型的状态。
用法
示例1
最好将准备可通知对象的任务留给通知本身。因此,使用getNotifiables()
和setNotifiables()
可以使您的代码更整洁和清晰。这是一个很好的例子
<?php namespace App\Notifications; use App\User; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Notification; class InvoicePaid extends Notification { use Queueable; /** * @var User */ private $notifiables; public function send() { if($this->getNotifiables()) { app(\Illuminate\Contracts\Notifications\Dispatcher::class) ->sendNow($this->getNotifiables(), $this); } } public function getNotifiables() { return $this->notifiables; } public function setNotifiables($notifiables) { $this->notifiables = $notifiables; } }
示例2:将通知作为事件监听器
我们可以通过向通知类添加handel()
函数将通知作为事件监听器。
<?php namespace App\Notifications; use App\User; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Notification; class InvoicePaid extends Notification { use Queueable; /** * @var User */ private $notifiables; public function handle($event) { // setup notifiable objects, just for illustration // you can replace this code by your suitable logic if($event->notifiables) { $this->setNotifiables($event->notifiables); } // send the notification $this->send(); } public function send() { if($this->getNotifiables()) { app(\Illuminate\Contracts\Notifications\Dispatcher::class) ->sendNow($this->getNotifiables(), $this); } } public function getNotifiables() { return $this->notifiables; } public function setNotifiables($notifiables) { $this->notifiables = $notifiables; } }
然后在app/providers/EventServiceProvider.php中的$listen数组中添加此类作为监听器
protected $listen = [ \App\Events\NewPurchase::class => [InvoicePaid::class] ];
然后您可以在需要时触发事件
event(new NewPurchase($args));
您可以将可通知对象传递给事件,或者将此任务留给通知本身。
NewPurchase看起来像这样
<?php namespace App\Events; use Illuminate\Queue\SerializesModels; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Broadcasting\InteractsWithSockets; class NewPurchase { use Dispatchable, InteractsWithSockets, SerializesModels; public $notifiables; public function __construct($notifiables = null) { $this->notifiables = $notifiables; } }