LC02 第 3 遍学习小结 -- 操作记录 6
由于LC02教程和实际需要开发的项目之间存在差异,所以第3遍学习只关注自己实际项目必须会用到的技能点。
第七章. 帖子回复
实际项目不需要回复功能,因此本章只需要看通用的知识点。
7.1 回复数据
pass
7.2 回复列表
pass
7.3 发表回复
Laravel Blade 模板提供了一个『视条件加载子模板』的语法:
@includeWhen($boolean, 'view.name', ['some' => 'data'])
字段(回复数)缓存:
$reply->topic->reply_count = $reply->topic->replies->count();
处理 XSS 安全问题:app/Observers/ReplyObserver.php
<?php
.
.
.
class ReplyObserver
{
.
.
.
public function creating(Reply $reply)
{
$reply->content = clean($reply->content, 'user_topic_body');
}
}
7.4 消息通知(数据库通知频道)
教程是回复后有通知,而项目应该是审核后有通知。
用到时再参考。
7.5 通知列表
列表自己写算了。
7.6 邮件通知
1) 添加邮件通知频道
vi app/Notifications/TopicReplied.php
<?php
.
.
.
class TopicReplied extends Notification
{
.
.
.
public function via($notifiable)
{
// 开启通知的频道
return ['database', 'mail'];
}
.
.
.
}
因为开启了 mail 频道,我们还需要新增 toMail 方法:
public function toMail($notifiable)
{
$url = $this->reply->topic->link(['#reply' . $this->reply->id]);
return (new MailMessage)
->line('你的话题有新回复!')
->action('查看回复', $url);
}
2) 使用队列发送邮件
class TopicReplied extends Notification implements ShouldQueue
vi .env
QUEUE_CONNECTION=redis
$ php artisan horizon
7.7. 删除回复
5) 话题连带删除
仅做参考
vi app/Observers/TopicObserver.php
public function deleted(Topic $topic)
{
\DB::table('replies')->where('topic_id', $topic->id)->delete();
}
7.8 小结
- @includeWhen
- 使用模型监控器实现计数器 —— reply_count
- 消息通知(数据库、邮件)
- 使用队列来发送邮件;
- 使用模型监控器的 deleted 方法做连带删除;