2010-11-03 14 views
3

J'ai un problème lors de la boucle en utilisant la boucle foreach() et à l'intérieur de cette boucle en utilisant ob_start() et ob_get_clean().ob_start() dans une boucle

Voilà ma fonction:

protected function renderEmail() { 
$template = $this->_case.".php"; 
if(is_file($this->_dir.DS.$template)) { 
    ob_start(); 
    if(!empty($this->_records)) {    
     foreach($this->_records as $key => $value) { 
      ${$key} = $value; 
     } 
    } 
    require_once($this->_dir.DS.$template); 
    return ob_get_clean(); 
} else { 
    $this->_errors[] = "Email template not found"; 
    return false; 
} } 

Cette fonction génère essentiellement le contenu de l'e-mail, puis retourne. Le problème que j'ai est quand je boucle une série d'adresses email - pour envoyer le même contenu d'email - seulement le premier renvoie le contenu - les suivants sont vierges - aucune idée pourquoi?

Répondre

11

Ok - vous ne le croirez pas - une fois que j'ai posté cette question - tout de suite après avoir réalisé où le problème était - j'utilise la fonction require_once() - qui empêche le même fichier d'être inclus - une fois changé pour inclure() tout fonctionne bien!

+0

Même ici, pfff. Donc, merci de ne pas supprimer la question :) – Grrrben

+0

La même chose ... Lol :))) –

0

Pourquoi boucler?

extract($this->_records);

semble un peu plus courte que

foreach($this->_records as $key => $value) { 
    ${$key} = $value; 
} 

et natif en plus

et var_dump est une grande aide parfois (pour la prochaine fois que vous avez des problèmes comme celui-ci):

0

Chaque fois que vous allez utiliser un même fichier plusieurs fois dans une boucle, vous ne devriez jamais utiliser require_once() ou include_once, Au lieu de cela, utilisez 'include', et tout ira bien!