Bonsoir,

Alors Grafikart dans ton tuto un site de a à z tu as l'helpers session pour afficher des messages mais tu affiche des message sur la même pas d'édition et moi je fais un redirect vers mon index mais ma session est vide après ma redirection.

Voici le classe session:

class Session {

    public function __construct() {
        if(!isset($_SESSION)) {
            session_start();
        }
    }

    public function setFlash($message, $type = 'success') {
        $_SESSION'flash'] = array(
            'message' => $message,
            'type' => $type
        );
    }

    public function flash() {
        if(isset($_SESSION'flash']'message'])) {
            $h = '<div class="alert-message '.$_SESSION'flash']'type'].'"><p>'.$_SESSION'flash']'message'].'</p></div>';

            $_SESSION'flash'] = array();

            return $h;
        }
    }

}

Et je la charge dans le construct de controller:

public function __construct($request = null) {        
        if($request) {
            $this->request = $request;
        }

        $this->Session = new Session();
        $this->Form = new Form($this);
        $this->Html = new Html();
        require APP.DS.'config'.DS.'hook.php';
    }

Et voici comment je remplis ma session:

function admin_edit($id = null) {
        $this->loadModel('Posts');

        $d'id'] = '';

        if($this->request->data) {
            $this->Posts->save($this->request->data);
            $id = $this->Posts->id;
            $this->Session->setFlash('Le post à bien été ajouté.');
            //$this->redirect('admin/posts/index');
        }

        if($id) {
            $this->request->data = $this->Posts->findFirst(array(
                'conditions' => array('id' => $id)
            ));

            $d'id'] = $id;
        }

        $this->set($d);
    }

Si j'enlève ma redirection tout fonctionne et si je la met ça marche plus!!!!!

Une idée sur le pourquoi du comment?

Merci d'avance.......

7 réponses


fait un debug_backtrace dans flash puis un die.
Remet ton redirect et voit à quel moment il vide la session.

djtec
Auteur

Quand je fais:

public function flash() {
        debug($_SESSION);
        if(isset($_SESSION'flash']'message'])) {
            debug($_SESSION);
            $h = '<div class="alert-message '.$_SESSION'flash']'type'].'"><p>'.$_SESSION'flash']'message'].'</p></div>';
            debug($_SESSION);
            $_SESSION'flash'] = array();

            return $h;
        }
    }

J'ai le résultat suivant:

Debug
Fichier: /Users/***/Sites/blog/app/helpers/Session.php
Ligne: 24
Voir plus
Array
(
    [flash] => Array
        (
        )
)

La ligne 24 est le 1er debug c'est quelle se vide avant le if mais je vois pas où.

A mon avis il y a un flash() qui se fait avant la redirection, fait un debug puis un die ça devrait couper le script au premier flash et tu verra donc quel fichier a été appellé et ou le flash a eu lieu.

Ca me fait la même chose en fait, d'ailleurs, on voit dans le tuto jour 5 que quand on insère un article, après la redirection, on a plus le message de confirmation de la modification

djtec
Auteur

Voilà mon debug mais pour moi tout est normal:

Debug
Fichier: /Users/***/Sites/blog/app/helpers/Session.php
Ligne: 25
Voir plus
Fichier: /Users/***/Sites/blog/app/views/layout/admin.ctp
Ligne: 86
Fichier: /Users/***/Sites/blog/core/Controller.php
Ligne: 71
Fichier: /Users/***/Sites/blog/core/Dispatcher.php
Ligne: 31
Fichier: /Users/***/Sites/blog/app/webroot/index.php
Ligne: 17
Array
(
    [User] => stdClass Object
        (
            [id] => 1
            [username] => admin
            [password] => ****
            [mail] => ****
            [level] => 1
            [active] => 1
        )
    [flash] => Array
        (
            [message] => Le post à bien été ajouté.
            [type] => success
        )
)
djtec
Auteur

Quelqu'un à une idée de ce qu'il se passe car je trouve pas ce qu'il se passe?

djtec
Auteur

Toujours pas d'idée????