Laravel 5.3 自定义 Notification Channel

JellyBool

JellyBool

Laravel 5.3 引入了全新的 Notification 通知系统,该系统默认支持 mail,database 和 array 三种 channel,但是在实际的开发中,这些默认的 channel 有可能满足实际的需求,比如在国内使用邮件发送的时候,该如何使用 Sendcloud 来集成,使得 Notification 也可以正常使用起来。这个时候可以使用下面的方法来自定义 Channel

1.在 app/ 目录下创建 Channels/ 目录,并在该目录内创建自定义的 Channel 类,比如 SendCloudChannel:

namespace App\Channels;


use Illuminate\Notifications\Notification;


/**

 * Class SendCloudChannel

 * @package App\Channels

 */

class SendCloudChannel

{

    /**

     * @param $notifiable

     * @param Notification $notification

     */

    public function send($notifiable, Notification $notification)

    {

        $message = $notification->toSendcloud($notifiable); // 注意这个 toSendcloud 的方法,在使用的时候要一致

    }

}

注意在这个类里面,一定要实现 send() 这个方法。然后在有了这个 SendCloudChannel 类之后,在使用的使用可以直接以 SendCloudChannel::class 的方式来使用,比如 在 NewUserFollowNotification 中可以这样使用:

class NewUserFollowNotification extends Notification

{

    public function via($notifiable)

    {

        return [SendCloudChannel::class,'database']; // 注意这里面的 sendCloudChannel::class 就是我们自定义的

    }


    public function toSendcloud($notifiable) 

    {

        // 发送邮件的具体代码.

    }

}

注意 toSendcloud($notifiable) 自定义 SendCloudChannelsend() 方法体的 $notification->toSendcloud($notifiable) 的两个 toSendcloud 名字要一致。

本文由 JellyBool 创作, 转载和引用遵循 署名-非商业性使用 2.5 中国大陆 进行许可。

共有 1 条评论

siwenyu
修改的评论也不能少于六个字哦!