2017-08-23 2 views
0

Je dois stocker des informations vitales (ID de succursale) lorsqu'un utilisateur visite mon site Web/application. Cette information devrait être disponible dans chaque contrôleur. Ce que je fais est la suivante:Variable de session dans CakePHP3

AppController.php

Configure::write('branch',$id); 

FooController.php

$branchId = Configure::read('branch'); 

Je ne suis pas sûr que ce soit la bonne façon. Est-ce une variable de session ou juste une config? Cette variable peut-elle être écrasée par d'autres utilisateurs?

Ce que je lis dans le Cookbook était, que je peux utiliser:

Configure::write('Session', [ 
    'defaults' => 'php' 
]); 

puis lisez la variable dans un contrôleur:

$this->request->session()->read('branch'); 

Mais où puis-je mettre 'succursale'? Est-ce même possible dans AppController?

Répondre

1

Sessions is available partout où vous avez accès à l'objet de requête. En d'autres termes, réglez votre branche où vous voulez (ou là où c'est facile pour vous). Par exemple, je pense que c'est mieux pour vous de faire quelque chose comme ça:

Dans votre App.phpinitialiser votre valeur "Branch" comme celui-ci

Configure::write('branch',$id); 

Dans votre AppController, à l'intérieur contrôle beforeFilter fonction si la session existe, sinon, utilisez la valeur de configuration comme ce

if(!$this->request->session()->read('branch')){ 
    $this->request->session()->write('branch', Configure::read('branch')); 
} 

Et dans votre fooController il suffit d'utiliser $this->request->session()->read('branch'); et $this->request->session()->write('branch', 'value');

Mais vous pouvez également lire et écrire la session dans View ou Cell ...

Espérons que ça aide.

+0

Merci. Mais il manque quelque chose. Je ne peux pas utiliser $ this-> Session dans mon AppController, même avec 'use Cake \ Network \ Session;' :( – DeVolt

+1

J'ai utilisé request-> session() dans mon AppController: $ this-> request-> session()> read ('branch'); – DeVolt