总结:第六章知识要点

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对队列任务进行监控。

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!