Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
je découvre tout juste le php objet et ZF.
j'ai fais mes débuts via le tuto Getting Started with the Zend Framework et j'essaie maintenant d'y intégrer un singleton.
J'ai donc innocemment créé, en tant que model, quelquechose de ce style :
class Singleton { private static $_instance; private function __construct(){ } public static function getInstance() { if (!isset(self::$_instance) ) { self::$_instance = new Singleton(); } return self::$_instance; } }
que je load via loadClass() directement dans le bootstrap.
de ce que j'ai compris...
2 appels successifs de Singleton::getInstance(); au sein d'un même controller me renvoient bien à une unique instance.
en revanche, après un _redirect(), l'appel de getInstance() depuis un controller différent du premier me créé un nouvel objet : chose que je ne veux évidement pas.
je n'ai pas forcément tout compris sur la question de portée des variables au sein du ZF..
si bien que ce soit une mauvaise implémentation, mauvaise utilisation ou incompréhension générale... je ne n'ai pas la solution.
auriez vous une piste à me suggérer?
Hors ligne
Bonjour,
Ton problème n'est pas lié au ZF. C'est du PHP standard. Quand tu fais un singleton, c'est effectivement une instance unique dans ton script, hors quand tu fais un _redirect, tu appelles un autre script (ça fait une redirection 302). Ton singleton est donc détruit lors de la redirection. Quand tu appelles getInstance() de nouveau c'est normal qu'il appelle de nouveau le constructeur.
Si tu veux conserver un objet sur 2 pages, il faut regarder du coté des sessions (et il faut que ton objet soit sérialisable).
A+, Philippe
Hors ligne
Il faut bien faire la différence dans le MVC de ZF, entre un __redirect(), qui va en effet relancer une instance par redirection HTTP 302 (comme si le navigateur client avait cliqué sur un lien) , et un __forward(), qui va relancer une boucle de dispatching dans le même processus PHP, et donc garder la mémoire intacte, et ses singletons.
Hors ligne
ok, aucune magie mais une simple requête http, on cherche souvent trop compliqué.
découvrir consiste à voir comme tout le monde et à réfléchir comme personne..
je vous remercie.
Hors ligne