Comprendre le registre Magento


13

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:

  1. 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 ?
  1. 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




merci Amit Bera, je lisais cet article et la réponse SOF par Alan avant de poster cette question. Je n'ai pas pu tout à fait obtenir mes réponses à partir de là.
Hashid

Réponses:


23

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 Mageclasse 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.


1
Donc, c'est vivant seulement pour UNE demande? Ce qui signifie que si je charge une page dans Magento, une demande est terminée et les données de registre sont vidées?
Hashid

4
Oui, les valeurs que vous définissez avec 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.
Jonathan Hussey

1
ça a du sens! La même chose s'applique-t-elle également à l'instance singleton?
Hashid

1
Oui exactement la même chose - si vous regardez la getSingleton()méthode de la Mageclasse, elle stocke réellement les données dans le registre.
Jonathan Hussey

3

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.


Mais comment Magento va-t-il mapper la requête HTTP et le registre?
Hashid

2

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


merci liyakat. J'ai lu prattski.com/2014/09/23/using-the-magento-registry-mageregister avant de poster: P Mais comment Magento va-t-il mapper la variable et l'utilisateur?
Hashid

1
@Hashid, vous pouvez aussi avoir plus d'idées avec le blog d'Alan. comment le registre fonctionne avec chaque demande dans le code ci-dessous. alanstorm.com/magento_registry_singleton_tutorial
liyakat

lisez aussi :-)
Hashid
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.