Laravel 通知 - 通过 Slack、短信、电子邮件等轻松发送快速更新
发布于 作者: Mohamed Said
Laravel 通知是即将发布的 Laravel 5.3 中的一项全新功能,它允许您通过 Slack、短信、电子邮件等服务快速发送通知更新。
让我们看看使用这项新功能构建和发送通知有多容易。
class NewPost extends \Illuminate\Notifications\Notification{ public function __construct($post) { $this->post = $post; } public function via($notifiable) { return ['database']; } public function toArray($notifiable) { return [ 'message' => 'A new post was published on Laravel News.', 'action' => url($this->post->slug) ]; }}
现在您只需要将通知发送给选定的用户。
$user->notify(new NewPost($post));
创建通知
Laravel 5.3 附带一个用于创建通知的新控制台命令。
php artisan make:notification NewPost
这将在 app/Notifications
中创建一个新类,每个通知类都包含一个 via()
方法以及用于为不同频道构建通知的不同方法。
使用 via()
方法,您可以指定您希望此特定通知通过哪些频道发送,请查看官方文档网站的示例。
public function via($notifiable){ return $notifiable->prefers_sms ? ['sms'] : ['mail', 'database'];}
via 方法接收一个 $notifiable
实例,它是您要向其发送通知的模型,在大多数情况下,它将是用户模型,但并不限于此。
可用的频道是:mail
、nexmo
、database
、broadcast
和 slack
。
格式化电子邮件通知
您可以格式化通过不同频道发送的通知,例如,让我们看一下格式化邮件通知。
public function toMail($notifiable){ return (new MailMessage) ->subject('New Post!') ->line('A new post was published on Laravel News!') ->action('Read Post', url($this->post->slug)) ->line('Please don\'t forget to share.');}
这将使用一个内置的响应式模板创建一个邮件消息,您可以使用 vendor:publish
控制台命令发布它。
通知系统会自动在您的模型中查找 email
属性,但是,您可以通过在您的模型中定义 routeNotificationForMail
并返回此模型将被联系的电子邮件地址来自定义此行为。
格式化 Nexmo 短信通知
与电子邮件通知一样,您需要在您的通知类中定义一个 toNexmo
方法。
public function toNexmo($notifiable){ return (new NexmoMessage) ->from(123456789) ->content('New post on Laravel News!');}
在 Nexmo 通知 的情况下,laravel 将在模型中查找 phone_number
属性。您可以通过定义 routeNotificationForNexmo
方法来覆盖它。
您可以在 Nexmo 配置文件中设置全局 from
号码,这样您就不必在每个通知中都提供 from
号码。
格式化数据库通知
要格式化数据库通知,您可以定义一个 toDatabase
方法。
public function toDatabase($notifiable){ return new DatabaseMessage([ 'message' => 'A new post was published on Laravel News.', 'action' => url($this->post->slug) ]);}
要开始使用数据库通道,您可以阅读 官方网站 上的完整文档。
发送通知
您可以使用模型上的 notify()
方法发送通知,此方法存在于 Notifiable
特性中,您需要将其添加到您的模型中。
$user->notify(new NewPost($post));
您也可以使用 Notification facade,这将允许您同时向多个可通知对象发送通知。
Notification::send(User::all(), new NewPost($post));
排队通知
您可以通过在通知类上使用 ShouldQueue
接口并包含 Queueable
特性来轻松地将发送通知排队。
<?php namespace App\Notifications; use Illuminate\Bus\Queueable;use Illuminate\Notifications\Notification;use Illuminate\Contracts\Queue\ShouldQueue; class NewPost extends Notification implements ShouldQueue{ use Queueable;}