Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je travaille actuellement sur un site multilingue. Actuellement j'ai un soucis dans mon code lorsque j'essaie d'accéder directement à une page à l'intérieur du site.
Mes urls sont traduites.
Lorsque j'essaie d'accéder à une url traduite directement (comme le ferait un internaute provenant d'un moteur de recherche), j'ai un message m'indiquant "Invalid controller specified (birds)", birds étant la traduction de mon controller oiseaux. En français pas de problème, car les noms réels des controllers et actions sont en français.
Si je passe par la racine du site et que je choisi la langue anglaise, alors je n'ai plus ce problème jusqu'à ce que la session expire.
Je pense que mon problème vient donc de la session. Elle ne doit pas se lancer lorsque l'on accède directement à une page intérieure de mon site. Comment faire en sorte que la session soit lancée automatiquement à la première connection ?
Dans mon Bootstrap.php :
protected function _initSession() { $session = new Zend_Session_Namespace('masession', true); Zend_Registry::set('session', $session); return $session; }
Hors ligne
personnellement je fait ceci :
protected function _initSession() { $this->bootstrap('db'); $session = $this->getPluginResource('session'); $session->init(); Zend_Session::start($this->getOptions()); $defaultNamespace = new Zend_Session_Namespace(); if (!isset($defaultNamespace->initialized)) { Zend_Session::regenerateId(); Zend_Session::registerValidator(new Biblio_Session_Validator_Ip()); Zend_Session::registerValidator(new Zend_Session_Validator_HttpUserAgent()); $defaultNamespace->initialized = true; $defaultNamespace->time = time(); $defaultNamespace->role = 'guest'; } }
Hors ligne
Merci,
Je ne peux pas encore le tester pour le moment car j'ai un problème avec mes routes traduites. Je pense que ton code corrige mon problème. Je te confirme ça dès que je peux.
Hors ligne
au passage tu peux supprimer la ligne : Zend_Session::start($this->getOptions());
qui est inutile puisque le init juste avant le fait
et le boostrap db c'est uniquement si tu as besoin d'un base de donnée pour les session ....
Hors ligne
Je l'ai déjà fait merci . Je te dirai ce qu'il en est dès que mon problème de route traduite sera résolu.
Hors ligne
Ca fonctionne, merci Grummfy (Résolu)
Dernière modification par Flizer (09-01-2010 15:19:00)
Hors ligne
Comment utilise t'on les variables de sessions par la suite?
Hors ligne
la doc est assez conséquente sur le sujet http://framework.zend.com/manual/en/zen … usage.html
$defaultNamespace = new Zend_Session_Namespace();
$defaultNamespace->maVar = 'toto';
Hors ligne