2009-09-23 23 views
0

我有一個控制器,其中包括髮送電子郵件。我需要在發送電子郵件之前向用戶回覆消息(否則,看起來屏幕卡住了)。
那麼,在我到達控制器的末端之前,我該如何迴應在控制器啓動時設置的消息,或者我應該如何一起考慮另一個方向?如何在ZF中刷新輸出

回答

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();技術。

+0

我需要佈局也在那裏。 – 2009-09-23 15:39:08

+0

在這種情況下,您可以在加載視圖時執行某種AJAX請求,因爲佈局在控制器操作執行後呈現,而不是在執行期間呈現。 – Chris 2009-09-24 03:26:49

+0

這麼想......謝謝! – 2009-09-29 02:29:45

0

您可以嘗試使用關機功能發送電子郵件。如果你也刷新輸出緩衝區,這將確保用戶首先看到渲染的頁面。在你的代碼調用:

register_shutdown_function('send_email', $params); 

再有,看起來像一個函數:

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

有關問題的郵件部分。

根據時間的不同 - 請求消息需要發送多久 - 另一種可能性是創建一個消息隊列(可能是一個數據庫表),向該表寫入一條記錄,然後運行一個cron進程消耗隊列,發送任何未發送的消息,標記爲已發送等。