为什么新建话题后跳转到详情页,slug为空,但数据库中slug写入成功?
1.新建话题
2.跳转到话题详情页,URL中没有slug

3.数据库中能看到对应话题的slug是写入成功了的

4.刷新页面后,URL中的slug能正常显示

5.重新新建一个话题,在TopicsController/show 中dd返回的$topic

返回值中slug为空

数据库中slug写入成功

为什么新建话题后,跳转到话题详情页时slug为空,但是数据库中却有值?(刷新后url中就能正常显示slug了,dd($topic)slug中也有值。)

关于 LearnKu
你好,你在保存时用
dd()打印查看存储参数的方式很好,但dd()中断了观察者的Saving事件,所以此时slug为空。保存后的跳转是这样写的吗?
@MArtian ,你好,我保存后的跳转是和你截图里面写的一样的。
dd是我第二次测试用的,请看我问题的中的1-4点,在没有dd中断观察者的saved的情况下,跳转后话题详情页的URL也不显示slug,但是数据库里面slug已经保存成功了,刷新详情页URL中的slug才正常显示,请问这是什么原因呢?
(github.com/cocaomouse/larabbs 我的代码上传在这里)
@cocaomouse 请问你做
翻译标题分发任务了吗?麻烦把Topic观察者代码贴一下@MArtian Topic观察者代码在这里 github.com/cocaomouse/larabbs/blob... 做了 翻译标题 分发任务;新建 话题 后,数据库里面也有 slug 数据
刷新页面后,URL中的slug就出现了
@cocaomouse 噢,我明白你的意思了,因为这里观察者使用了任务分发去调用 百度翻译 API 接口,这里的提交实际上是 异步 的。
当点击保存时,程序的执行流程是这样的:
Saving,先过滤XSS字符,生成话题摘录Saved事件,此时这条数据已在库中,但slug为空,然后分发任务去调用 百度翻译 APIslug,再次刷新时,百度接口响应请求并返回了数据,分发任务已经把翻译好的slug写库,你再次刷新就看到了翻译好的slug要验证这一点也很简单,把
.env文件中的 百度翻译API 的BAIDU_TRANSLATE_APPID和BAIDU_TRANSLATE_KEY删掉,再发布一次试试看就明白了。@MArtian 我明白怎么回事了,刚才仔细看了下Laravel Horizon的记录,以id=151为例, 注意 Pushed At:2021-08-09 16:54:17;Completed At:2021-08-09 16:54:18;
谢谢你的耐心解答。