我正遇到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
后面的控制器操作不会显示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)
替换了长时间运行的过程,它产生了所描述的行为。问题是[[not由我为了隔离大小写而替换的代码引起的。这实际上是由于脚本运行时间长所致。我无法使脚本执行得更快。代替示例中的sleep(11)
,在生产代码中将某些内容发送到打印机,这需要约11秒才能完成。sleep(11)
不起作用,则可能是由于并发而产生副作用。 FlashMessenger基于会话,因此您必须检查会话配置。重定向器动作帮助器$this->_redirect();
将发送标头并创建新的HTTP请求以产生新的整个调度过程。因此,您还必须检查已注册到此过程的插件(说明here)。