如何在ZF中刷新输出

时间:2009-09-23 15:28:27

标签: php zend-framework

我有一个控制器,除其他外,发送电子邮件。我需要在电子邮件发送开始之前向用户回复消息(否则看起来屏幕卡住了) 那么,在我到达控制器的末尾之前,如何回显在控制器开始时设置的消息,或者,我是否应该在另一个方向上思考所有消息?

3 个答案:

答案 0 :(得分:1)

尝试一下:

<?php
//...
public function someAction()
{
    echo "Something";
    ob_flush();flush();
}

forum post讨论了您的问题。他们建议:

<?php
$frontController = Zend_Controller_Front::getInstance();
$frontController->setParam('disableOutputBuffering', true);

然后执行ob_flush();flush();技术。

答案 1 :(得分:1)

对于问题的邮件部分。

根据时间 - 请求消息需要多久发送后 - 另一种可能性是创建消息队列(可能是db表),将记录写入该表,然后运行cron进程消耗队列,发送任何未发送的消息,将其标记为已发送等等。

答案 2 :(得分:0)

您可以尝试使用关机功能发送电子邮件。如果您还刷新输出缓冲区,这将确保用户首先看到呈现的页面。在您的代码调用中:

register_shutdown_function('send_email', $params);

然后有一个看起来像这样的函数:

function send_email($params) {
    ob_flush();flush();
    // Send your email here
}