2009-09-23 7 views
0

J'ai un contrôleur qui, entre autres choses, envoie des courriels. Je dois faire écho à un message à l'utilisateur avant que l'envoi de l'email commence (sinon il semble que l'écran soit bloqué).
Alors, comment puis-je faire écho à un message qui est défini au début d'un contrôleur, avant que j'atteigne la fin du contrôleur, ou, devrais-je penser dans une autre direction tous ensemble?Comment vider la sortie dans ZF

Répondre

1

Essayez peut-être:

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

Ce forum post traite votre question. Ils suggèrent:

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

Puis en effectuant la technique ob_flush();flush();.

+0

J'ai besoin de la disposition pour être là aussi. –

+0

Dans ce cas, vous pouvez effectuer une requête AJAX lorsque votre vue est chargée, car la mise en page est restituée après l'exécution de l'action du contrôleur et non pendant. – Chris

+0

Pensée donc ... Merci! –

0

Vous pouvez essayer d'utiliser une fonction d'arrêt pour envoyer l'e-mail. Si vous videz également le tampon de sortie, l'utilisateur verra d'abord la page affichée. Dans votre appel code:

register_shutdown_function('send_email', $params); 

Et puis ont une fonction qui ressemble à:

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

Pour la partie du courrier de la question. Selon le timing - combien de temps après la requête le message doit être envoyé - une autre possibilité serait de créer une file d'attente de messages (peut-être une table db), écrire un enregistrement dans cette table, puis lancer un processus cron qui consomme la file d'attente, envoie des messages non envoyés, les marque comme envoyés, etc.

Questions connexes