本章知识梳理和总结
7.1回复数据
这一节重点是评论、帖子与用户之间的数据关联。
7.2回复列表
这一节重点是在视图层,将前一章的关联数据填入视图中。
7.3发表回复
这一节重点是对表单数据的处理,大都是以前学过的:
使用表单验证类限制用户输入
在观察器中对数据进行处理
个人理解: 相对于控制器中使用Eloquent模型直接存储(我管这个叫“主干”,即主要操作),在观察器中的数据处理属于对细节和旁支的操作,扩展性强,易于把握执行的时机,如本节中,在creating 中执行防范XSS攻击的数据处理,在 created中对文章评论数进行刷新
7.4消息通知
这一节是第一次接触Laravel的通知系统,这里我们首先使用的是database频道,via($notifiable)
方法返回了使用哪些频道。这里我们首先使用的是database频道,Laravel自带了针对database频道的通知表单迁移文件,需要执行迁移。
一条通知对应着一个通知类,这个类中可以包含多种通知的频道。使用该通知的方法,use 引入该通知类,同时trait——Illuminate\Notifications\Notifiable,调用Notifiable中的notify()
方法,该方法接收通知实例(也就是刚才引入的通知类)做参数。
$reply->topic->user->notify(new TopicReplied($reply))
toDatabase
方法将我们想传入到通知列表页面的数据打包为一个数组返回,进行保存
public function toDatabase($notifiable)
我们可以观察一下notifications数据表,这里没有user_id,但是有一个notifiable_id,这个就相当于user_id。data字段是一个被压缩为json格式的数组。
访问通知时根据notifiable_id字段查找数据记录,使用Illuminate\Notifications\Notifiable
trait里面的notifications
Eloquen关联方法返回实体通知
$notifications = Auth::user()->notifications()->paginate(20);
在view层输出data字段里保存的数组内容
<a href="{{ $notification->data['topic_link'] }}">{{ $notification->data['topic_title'] }}</a>
查找数据记录后,将通知标为已读
$user->unreadNotifications->markAsRead();
7.6邮件通知
邮件通知toMail($notifiable)
返回一个Illuminate\Notifications\Messages\MailMessage
实例
public function toMail($notification)
{
$url = $this->reply->topic->link(['#reply'.$this->reply->id]);
return (new MailMessage)
->line('你的话题有新回复')
->action('查看回复',$url);
}
由于邮件通知涉及到调用API接口,所以这里使用队列任务系统,实现shouldQueue
接口
class TopicReplied extends Notification implements ShouldQueueCopy
Laravel 会检测 ShouldQueue 接口并自动将通知的发送放入队列中
推荐文章: