gpt4 book ai didi

php - 在长时间请求后添加消息时 flashMessenger 不工作

转载 作者:可可西里 更新时间:2023-11-01 13:28:05 25 4
gpt4 key购买 nike

我在使用 Zend Frameworks flashMessenger 时遇到了一个非常奇怪的问题并且找不到问题的原因,也不知道如何解决。

当请求的操作花费很长时间时,flashMessenger 无法按预期工作。

无效示例:

class AttachmentController extends Zend_Controller_Action {

public function printAction() {
// action takes really long and causes flash message to not appear at all
sleep(11);

$this->_helper->flashMessenger
->setNamespace('success')
->addMessage("It's done!");

$this->_redirect('/attachment/index');
}
}

使用上面的代码,/attachment/index 后面的 Controller 操作不会显示 flashMessage。

但是,如果我减少脚本的运行时间,它会起作用:

class AttachmentController extends Zend_Controller_Action {

public function printAction() {
// now the action runs faster and the flashMessage appears!
sleep(1);

$this->_helper->flashMessenger
->setNamespace('success')
->addMessage("It's done!");

$this->_redirect('/attachment/index');
}
}

问题:flashMessenger 不显示我的消息的原因可能是什么?我该如何解决?

注意事项:

  • 是的,我确定这就是问题所在。我在生产代码中用 sleep(11) 替换了长时间运行的过程,它产生了所描述的行为。问题不是是由我为隔离案例而替换的代码引起的。确实是脚本运行时间长造成的。
  • 我无法让脚本执行得更快。与示例中的 sleep(11) 不同,在生产代码中,某些内容被发送到打印机,需要约 11 秒才能完成。

最佳答案

两个例子都很好。如果 sleep(11) 不工作,你有副作用,可能是并发的。 FlashMessenger 是基于 session 的,因此您必须检查您的 session 配置。重定向器操作助手 $this->_redirect(); 将发送一个 header 并创建一个新的 HTTP 请求以产生一个新的整个调度过程。因此,您还必须检查注册到此进程的插件(解释 here )。

要解决此问题,您可以尝试使用转发器而不是重定向器。解释的真好here (重定向和转发之间的区别)和 here (使用 flashmessenger-without-redirect)。

顺便说一句,使用 sleep 来模拟“打印作业已完成”是一种不好的做法。您应该更喜欢另一条消息,例如“Printjob added to queue”,这不是谎言,而且对用户友好。

关于php - 在长时间请求后添加消息时 flashMessenger 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22714452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com