Bonjour,

Je n'arrive pas a comprendre pourquoi le unset($_SESSION['flash']) détruit ma variable $_SESSION['flash'] avant même d'avoir appelé la fonction getFlashes() .
merci pour votre aide

Voici mon header.php

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
code de base du starter template dans les exemples bootstrap
.....
 
<div class="container">
 
 
<?php 
$session_instance = Session::getInstance();
    echo "<pre>";
      var_dump($_SESSION);
      echo "</pre>";
if($session_instance->hasFlashes()){ // si il y a une variable de $_SESSION['flash'] d'enregistrer alors 
    foreach( $session_instance->getFlashes() as $type=>$message){ // il récupère les infos 
        echo "<div class='alert alert-$type'>$message</div>"; // et les affiche dans une div
    }
  } 
?>
Sur ma page register.php

il y a bien sur le formulaire et des des appel aux fonctions de vérification puis:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
if($validator->isValid()){ ///une fois que tous les champs sont validé
 
            App::getAuth()->register($db, $_POST['username'], $_POST['password'], $_POST['email'] ); //enregistre dans la DB
            Session::getInstance()->setFlash('success', "Votre compte a été créé. Un email de confirmation vous a été envoyé pour valider votre compte"); //ajoute à la variable session un truc du style : $_SESSION['flash']['success'] ='......message.....";
            Redirect::pages('login'); // redirige sur la page login
 
}else{
            $errors = $validator->getErrors(); // si tous les champs ne sont pas valide, il affiche les erreurs
}
Pour finir ma Session :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
<?php 
namespace Core;
 
class Session{
    static $_instance;
 
    public static function getInstance(){ 
        if(!self::$_instance){ //si elle n'existe pas elle la créer
            self::$_instance = new Session; 
        }
        return self::$_instance;  // renvois l' instance de Session
    }
    public function __construct(){
        session_start();
    }
    public function setFlash($statut, $message){ 
        $_SESSION['flash'][$statut] = $message;
    }
    public function hasFlashes(){
        return isset($_SESSION['flash']);
    }
    public function getFlashes(){
        $flash = $this->read('flash');
        unset($_SESSION['flash']); // Mon problème se trouve là , unset() efface  les infos dans 'flash' avant même que getFlashes() ne soit appelé donc avant même:calim2: que le unset() ne soit appelé!!!
        return $flash;
    }
    public function read($key){
        return isset($_SESSION[$key]) ? $_SESSION[$key] : null;
    }
    public function write($key, $value){
        $_SESSION[$key] = $value;
    }
    public function delete($key){
        unset($_SESSION[$key]);
    }
}
Nom : Screenshot - 30052016 - 15:25:27.png
Affichages : 294
Taille : 31,7 Ko

comme vous pouvez le voir je fais un var_dump avant l'appel de getFlashes() et pourtant $_SESSION['flash'] n'apparait pas et si je commente le unset() dans le fichier Session.php tout se passe bien le message s'affiche MAIS le message reste, vu qu'il n'est plus détruit