V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
choulinlin
V2EX  ›  问与答

laravel 在 action 里有输出时就输出

  •  
  •   choulinlin · 2018-03-10 09:18:59 +08:00 · 1284 次点击
    这是一个创建于 2241 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    2. 更长的任务建议放队列里面执行,通过日志文件或数据库之类保存任务进度,然后另外写个查询任务进度的接口,前台轮询进度并显示给用户(当然你不保存进度,不显示进度,只显示个“正在处理...”也行,就是用户可能会 mmp )
    choulinlin
        11
    choulinlin  
    OP
       2018-03-10 12:49:33 +08:00
    @Clarencep 原来加 ob_implicit_flush 就好了 哎
    lifespy
        12
    lifespy  
       2018-03-10 12:59:46 +08:00
    @yangqi #7 楼主可能没用过队列,不理解
    choulinlin
        13
    choulinlin  
    OP
       2018-03-10 13:06:52 +08:00
    @lifespy 总是能遇到自以为高手 贬低别人
    lifespy
        14
    lifespy  
       2018-03-10 13:08:21 +08:00
    @choulinlin #13 你可能误解我的意思
    choulinlin
        15
    choulinlin  
    OP
       2018-03-10 13:09:23 +08:00
    @lifespy 你的意思很明白 能这样发言的 也应该入行不深
    MeteorCat
        16
    MeteorCat  
       2018-03-10 13:46:07 +08:00 via Android
    12 楼层主语气没问题,但是 13 楼题主这样回复,我感觉可能你对所谓“贬低”有什么误解?
    choulinlin
        17
    choulinlin  
    OP
       2018-03-10 14:21:09 +08:00 via Android
    @MeteorCat 那是因为你也是跟他一样以为的
    好了 结贴 鄙人早就不再讨论技术了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1486 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 17:09 · PVG 01:09 · LAX 10:09 · JFK 13:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.