laravel 在 action 里有输出时就输出

2018-03-10 09:18:59 +08:00
 choulinlin

#1 如果一个 action 需要执行很长时间 但其实中间是有输出的 我希望有输出时就立马能在浏览器能看到 而不是等所有 action 代码都执行完 再 render view 我才能看到输出 有没有 disable view 的方法?

#2 有没有谁用 voyager,能不能在特定 action 里 disable 掉它的侧边栏 就是菜单

1293 次点击
所在节点    问与答
17 条回复
yangqi
2018-03-10 09:22:09 +08:00
如果一个 action 要执行很长时间那就不应该有 view, 更适合用异步的 queue 和 job
choulinlin
2018-03-10 09:26:12 +08:00
@yangqi 我就是想 disable view 只有一个人同时执行这个 action 目前我是把 action 输出到 log 再 ajax 定时 去读取 log 再在 view 里显示
上次找了下 没找到怎么 disable view
yangqi
2018-03-10 09:34:21 +08:00
你这个就不应该放在 controller 和 action 里面,直接用 queue 和 job 后台处理
carlclone
2018-03-10 09:34:33 +08:00
Laravel Echo 适合你
choulinlin
2018-03-10 09:43:10 +08:00
@yangqi 你觉得难道我连这都不知道吗 ?
要 action 就是人为执行
choulinlin
2018-03-10 09:44:54 +08:00
@carlclone 感谢 试试看
yangqi
2018-03-10 09:55:57 +08:00
@choulinlin 你没懂我意思?人为执行然后放到 queue 里面后台 job 进行处理,有什么问题?
mrcn
2018-03-10 10:35:02 +08:00
直接 echo 数据,不用 view
MeteorCat
2018-03-10 10:43:47 +08:00
这个方案以前我们以前遇到过,业务场景是需要云打包服务,利用 PHP 进行对 jar 打包,因为 jar 打包时间很长,所以不能一直让用户卡顿在页面之中,我们的方案是直接点击之后,发所需的数据发到 ActiveMQ,客户页面直接返回'正在打包,请等待系统通知'之后,后台跑脚本 ActiveMQ 取出数据构建 jar 包完成之后推送一条消息给客户端让他接收这样,不知道这种方案适不适应题主所说的情况
Clarencep
2018-03-10 12:23:50 +08:00
1. 时间短于 30 秒的任务建议直接 echo 输出,echo 后面最好加个 flush(),action 最后不要 return 任何东东

2. 更长的任务建议放队列里面执行,通过日志文件或数据库之类保存任务进度,然后另外写个查询任务进度的接口,前台轮询进度并显示给用户(当然你不保存进度,不显示进度,只显示个“正在处理...”也行,就是用户可能会 mmp )
choulinlin
2018-03-10 12:49:33 +08:00
@Clarencep 原来加 ob_implicit_flush 就好了 哎
lifespy
2018-03-10 12:59:46 +08:00
@yangqi #7 楼主可能没用过队列,不理解
choulinlin
2018-03-10 13:06:52 +08:00
@lifespy 总是能遇到自以为高手 贬低别人
lifespy
2018-03-10 13:08:21 +08:00
@choulinlin #13 你可能误解我的意思
choulinlin
2018-03-10 13:09:23 +08:00
@lifespy 你的意思很明白 能这样发言的 也应该入行不深
MeteorCat
2018-03-10 13:46:07 +08:00
12 楼层主语气没问题,但是 13 楼题主这样回复,我感觉可能你对所谓“贬低”有什么误解?
choulinlin
2018-03-10 14:21:09 +08:00
@MeteorCat 那是因为你也是跟他一样以为的
好了 结贴 鄙人早就不再讨论技术了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/436726

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX