总结:第六章知识要点
6.1 新建话题
重点知识:$fillable 对用户编辑字段的控制,学会使用fill
将传参的键值数组填充到模型的属性中,再填写用户无法编辑的user_id
字段
$topic->fill($request->all());
$topic->user_id = Auth::id();
$topic->save();
学会使用模型观察器对保存的字段做提前的处理。
一开始我产生疑惑为什么会在观察器里对字段处理,感觉“多此一举”,但后面的课程里还会在saved的时候对slug字段安排队列任务处理,所以面对复杂情况,模型观察器就是一种解耦的好方式,我需要养成使用观察器的习惯。
6.2 编辑器优化
学会使用simditor, 使用Mix 的 copyDirectory方法编译相关文件
6.3 上传图片
学会使用simditor中上传图片的js,单独为上传图片建立路由和方法,方法中注意一开始初始化默认失败的返回数据,调用以前写好的上传头像的图片上传工具方法。
6.4 显示帖子
复制了laravel-china论坛的样式
6.5 防范XSS攻击
学会使用HTMLPurifier for Laravel ,在观察器中过滤字段
$topic->body = clean($topic->body, 'user_topic_body');
6.6 编辑帖子
对编辑相关操作进行权限控制,这是第一本教程的老知识点了
6.7 删除帖子
删除操作也需要权限控制,另外注意删除要用表单的方式,HTTP方法是DELETE
6.8 SEO友好的URL
本章创建了一个工具方法调用百度翻译接口,在新建帖子时对slug字段进行赋值。
安装使用了Guzzle库的HTTP客户端调用接口,使用了PinYin插件作为接口调用失败的补救方法。
有关接口的配置信息(第三方服务授权认证信息)写入在service.php里
为体现SEO友好的URL,单独为show
动作创建了新的路由和调用路由的方法,{slug?}
作为可选参数,后面还是对无{slug?}
参数的URL做了强制跳转301
redirect($topic->link(), 301)
6.9 使用队列
开启redis,并安装predis作为redis的类库。
新建队列任务执行上一章中的翻译操作,在任务类的构造器中接收Eloquent模型,并注意后面使用DB类直接对数据库进行操作,以避免再次调用Eloquent模型接口,引起死循环。
最后在监控器saved方法(此时Eloquent模型$topic已经拥有id)中推送任务到队列
dispatch(new TranslateSlug($topic))
安装horizon对队列任务进行监控。
推荐文章: