Bonjour à tous,

j'ai un problème de suppression de variable dans ma Session. Voilà ce que me retourne ma session :

array(
    'Config' => array(
        'userAgent' => '772728689246762826',
        'time' => (int) 1418015249,
        'countdown' => (int) 10
    ),
    'Experiences' => array(
        (int) 0 => array(
            'intitule' => 'test',
            'company' => 'test',
            'begin' => '21/09/1991',
            'end' => '21/09/1992',
            'in_progress' => '0',
            'status' => (int) 0,
            'created' => '2014-12-08 01:58:36'
        ),
        (int) 1 => array(
            'intitule' => 'test',
            'company' => 'test',
            'begin' => '21/09/1991',
            'end' => '21/09/1992',
            'in_progress' => '0', 
            'status' => (int) 0,
            'created' => '2014-12-08 02:07:28' 
        )
    )
)

J'aimerais supprimer une des entrées contenues dans le tableau "Experiences" alors voilà comment j'arrive à faire fonctionner ça par exemple :

$this->Session->delete('Experiences.0');

Là, pas de problème mon entrée est bien supprimée, mais le problème est que mon 0 est contenu dans une variable PHP et je n'y arrive pas du tout alors voilà certains de mes essais qui ne fonctionnent pas :

$id = 0;
$var = $this->Session->read('Experiences')[$id];

$this->Session->delete($var);
$this->Session->delete('Experiences.' . $id);

// Ou encore

unset($var);
$_SESSION['Experiences'][$id] = null;

J'imagine que je m'y prend mal alors j'espère qu'un d'entre vous arrivera à trouver une solution à ce problème car je bloque complètement :)

Merci par avance...

2 réponses


Grafikart
Réponse acceptée

Mmh bizarre car

$this->Session->delete('Experiences.' . $id);

Devrait marcher si 0 existe bien

Hello,
Tu veux supprimer toujours la première entrée de ton tableau ? toujours la dernière ? une particulière ?
Je viens de tester et chez moi ca marche parfaitement :

        debug($this->Session->read('Auth.User'));
        $id = 'parent_user_id';
        $this->Session->delete('Auth.User.' . $id);
        debug($this->Session->read('Auth.User'));

Dans le second debug() la clé 'parent_user_id' et sa valeur ont bien été supprimee.

Si tu utilises cakephp, il faut suivre la façon de faire du SessionComponent::delete
Par contre si tu veux supprimer une entrée/plusieurs entrées qui ont une caractéristique, tu peux faire un foreach

        $data = array(
            'Experiences' => array(
                array(
                    'intitule' => 'test',
                    'company' => 'test',
                    'begin' => '21/09/1991',
                    'end' => '21/09/1992',
                    'in_progress' => '0',
                    'status' => 0,
                    'created' => '2014-12-08 01:58:36'
                ),
                array(
                    'intitule' => 'test',
                    'company' => 'test22222222',
                    'begin' => '21/09/1991',
                    'end' => '21/09/1992',
                    'in_progress' => '0',
                    'status' => 0,
                    'created' => '2014-12-08 01:58:36'
                ),
            )
        );

        $this->Session->write($data);
        debug($this->Session->read('Experiences'));

        foreach ($this->Session->read('Experiences') as $k => $experience)
        {
            if(isset($experience['company']) && $experience['company'] == 'test')
            {
                $this->Session->delete('Experiences.' . $k);
            }
        }

        debug($this->Session->read('Experiences'));

Il m'a correctement supprimé de la session la première entrée qui avait 'company' == 'test',
Je viens de tester ce code sur un cakephp 2 et ca fonctionne.