2011-04-06 7 views
1

Je travaille sur un petit CMS personnalisé et j'aimerais mettre en place des messages flash. J'ai cherché des heures, mais je ne trouve rien qui se comporte comme je le veux. Et je n'arrive pas à faire fonctionner quelque chose. Je veux être en mesure de passer une variable (via $ _SESSION) à une autre page et, sur cette demande suivante, il sera supprimé. Je veux être capable d'utiliser une fonction keep_flash, au cas où je ne voudrais pas que le message soit supprimé avec la requête suivante du serveur.PHP Comment implémenter des messages flash

Quelqu'un peut-il m'envoyer dans la bonne direction? Je ne peux vraiment rien faire fonctionner.

Merci.

EDIT: Voici un code avec lequel je joue. Cela fonctionne en quelque sorte. Lorsque vous visitez la page pour la première fois, il définit $ _SESSION et tout va bien. Mais si vous actualisez, maintenant il supprime le $ _SESSION. Si vous actualisez à nouveau, il le rajoute ... etc. Donc, si vous deviez visiter la page, rafraîchir, puis aller à une autre page le message flash ne serait pas dans le $ _SESSION. Alors, comment puis-je résoudre ce problème?

class flash 
{ 
private $current = array(); 
private $keep = array(); 

public function __construct() 
{ 
    if (isset($_SESSION['flash'])) { 
     foreach($_SESSION['flash'] as $k=>$v) 
     { 
      $this->current[$k] = $v; 
     } 
    } 
} 

public function __destruct() 
{ 
    foreach ($this->current as $k=>$v) 
    {   
     if (array_key_exists($k,$this->keep) && $this->keep[$k] == $v) { 
      // keep flash 
      $_SESSION['flash'][$k] = $v; 

     } else { 
      // delete flash 
      unset($_SESSION['flash'][$k]); 
      unset($this->current[$k]); 
      unset($this->keep[$k]); 
     }   
    } 
} 

public function setFlash($key,$value) 
{ 
    $_SESSION['flash'][$key] = $value; 
} 

public function keepFlash($key) 
{ 
    $this->keep[$key] = $this->getFlash($key); 
} 

public function getFlash($key) 
{  
    if (array_key_exists($key,$this->current)) return $this->current[$key]; 

    return null; 
} 
} 

Répondre

3

idée de base est d'avoir toujours vérifier le script variable spécifique en session (généralement appelé « flash ») pour le contenu - sinon vide écran et le supprimer de la session. Lorsque le message est nécessaire, placez la même variable dans la session et la prochaine vérification la ramènera ...

keep_flash dans votre cas ne procéderait pas à la suppression, ou déplacer à un autre endroit en fonction de vos besoins.

pour la mise en œuvre juste google - habituellement enveloppé dans une sorte de classe - Personnellement, je aime phpclasses.org ou partie du cadre

+0

S'il vous plaît voir mon modifier dans le message original, j'ai ajouté un morceau de code. Votre solution fonctionnerait sauf que c'est fondamentalement comme utiliser le $ _SESSION par lui-même. Je veux que ma classe supprime tous les messages flash qui ne sont pas explicitement conservés. Donc, si vous définissez quatre messages flash sur page1.php, page2.php même si vous n'appelez que l'un d'eux, ils devraient tous être supprimés si aucun n'a été conservé avec une méthode keep. – CrazeD

+1

Je sais que vous aviez posé cette question il y a longtemps. Mais cela peut être utile pour vous http://mikeeverhart.net/php/session-based-flash-messages/ –

Questions connexes