Je me suis toujours demandé où étaient stockées toutes les données du registre dans Magento?
Je sais que même les objets singleton sont stockés dans le registre. Et le registre n'est qu'une variable de tableau statique de la classe Mage .
J'ai quelques questions ici pour effacer ma confusion:
- Le registre est-il différent pour différents utilisateurs? Je veux dire est-il créé sur une base par utilisateur (par requête HTTP )?
Par exemple,
Mage::register('foo', 'Hello World'); //set a value for foo Mage::registry('foo'); //will this return hello world for all HTTP users ?
- Les données du registre sont-elles stockées dans des sessions? Sinon, comment Magento identifiera-t-il quel utilisateur a invoqué les données du registre?
J'ai lu l' article de blog d' Alan Storm ainsi que sa réponse sur StackOverFlow à ce sujet. Mais je ne pouvais pas tuer la confusion. Veuillez me corriger Si je pense que mes bases sont foirées. Merci
Réponses:
Le registre stocke des données dans la mémoire qui est spécifique à cette demande (plutôt que l'utilisateur ou toute autre chose) et persiste pour la durée de cette demande uniquement. Le principe est vraiment très simple, la
Mage
classe est instanciée en tant qu'objet singleton pour chaque requête et l'objet Mage instancié reste en mémoire, et est accessible dans toutes les classes (et modèles) jusqu'à ce que la requête se termine et que la réponse soit envoyée.Comme l'objet est un singleton, chaque fois que vous y accédez, vous obtenez le même objet. Tout ce qui se passe, c'est que vous stockez des valeurs dans cet objet, donc lorsqu'une classe stocke une valeur et qu'une autre y accède, elles travaillent toutes les deux sur le même objet et la deuxième classe est en mesure de récupérer la valeur définie par le premier ensemble de classes.
la source
Mage::register()
persistent pour cette demande uniquement. Si vous souhaitez stocker des données spécifiques à l'utilisateur, vous devez utiliser la session, le registre est vraiment juste conçu pour rendre les données portables entre les classes.getSingleton()
méthode de laMage
classe, elle stocke réellement les données dans le registre.Le registre est stocké en mémoire et se fait par requête HTTP, vous ne pouvez donc pas partager de données entre différentes requêtes ou utilisateurs.
la source
Registre Magento stocké dans la mémoire de l' application .
chaque fois que votre script est en cours d'exécution, tout ce que vous aviez stocké dans le registre disparaît, il n'est donc pas nécessaire de s'inquiéter de l'effacer (sauf si le script que vous exécutez stocke de gros objets dans le registre et parcourt beaucoup de Les données).
Dans ce cas, vous devez annuler l'enregistrement de vos entrées lorsque vous en aurez terminé.
le Registre n'est qu'une propriété statique de la classe Mage. voir pour plus de détails
mais je ne pouvais toujours pas vraiment trouver une bonne explication
2) pour chaque utilisateur, il y aura un registre distinct par demande sur le serveur.
j'espère que cela ne sera pas clair dans votre esprit
la source