Comprender el registro de Magento

13

Siempre me he estado preguntando, ¿dónde están almacenados todos los datos de registro en Magento?

Sé que incluso los objetos únicos se almacenan en el registro. Y el registro es solo una variable de matriz estática de la clase Mage .

Tengo un par de preguntas aquí para aclarar mi confusión:

  1. ¿El registro es diferente para diferentes usuarios? Quiero decir, ¿se crea por usuario (por solicitud HTTP )?

Por ejemplo,

Mage::register('foo', 'Hello World'); //set a value for foo
Mage::registry('foo'); //will this return hello world for all HTTP users ?
  1. ¿Los datos de registro se almacenan en sesiones? Si no, ¿cómo identificará Magento qué usuario invocó los datos del registro?

He leído el artículo del blog de Alan Storm, así como su respuesta en StackOverFlow con respecto a esto. Pero no pude matar la confusión. Corrígeme si creo que mis conceptos básicos están en mal estado. Gracias

Hashid
fuente
gracias Amit Bera, estaba leyendo ese artículo y la respuesta de SOF de Alan antes de publicar esta pregunta. No pude obtener mis respuestas desde allí.
Hashid

Respuestas:

23

El registro almacena datos en la memoria que es específica para esa solicitud (en lugar de usuario o cualquier otra cosa), y persiste durante la duración de esa solicitud solamente. El principio es muy simple en realidad, la Mageclase se instancia como un objeto singleton para cada solicitud y el objeto Mage instanciado permanece en la memoria, y es accesible en todas las clases (y plantillas) hasta que se complete la solicitud y se envíe la respuesta.

Como el objeto es un singleton, cada vez que accedes a él obtienes el mismo objeto. Todo lo que está sucediendo es que está almacenando valores en este objeto, por lo que cuando una clase almacena un valor y otra accede a él, ambos trabajan en el mismo objeto y la segunda clase puede recuperar el valor que estableció la primera clase.

Jonathan Hussey
fuente
1
Entonces, ¿está vivo solo para UNA solicitud? ¿Significa que si cargo una página en Magento, una solicitud está HECHA y los datos del registro están vacíos?
Hashid
44
Sí, los valores establecidos con Mage::register()persisten solo para esa solicitud. Si desea almacenar datos específicos del usuario, debe usar la sesión, el registro está realmente diseñado para hacer que los datos sean portátiles entre clases.
Jonathan Hussey
1
¡eso tiene sentido! ¿Lo mismo se aplica a la instancia singleton también?
Hashid
1
Sí, exactamente lo mismo: si observa el getSingleton()método de la Mageclase, en realidad almacena los datos en el registro.
Jonathan Hussey
3

El registro se almacena en la memoria y es por solicitud HTTP, por lo que no puede compartir datos entre diferentes solicitudes o usuarios.

Vladimir Kerkhoff
fuente
Pero, ¿cómo mapeará Magento la solicitud HTTP y el registro?
Hashid
2

Registro de Magento almacenado en la memoria de la aplicación .

cada vez que se ejecuta su script, lo que haya almacenado en el registro desaparece, por lo que no hay necesidad de preocuparse por borrarlo (a menos que el script que está ejecutando esté almacenando objetos grandes en el registro y esté pasando por un montón de datos).

En tal caso, debe cancelar el registro de sus entradas cuando haya terminado con ellas.

El Registro es solo una propiedad estática de la clase Mage. ver para más detalles

pero aun así no pude encontrar una buena explicación

2) para cada usuario habrá un registro separado por solicitud en el servidor.

espero que esto te aclare un poco

liyakat
fuente
gracias liyakat. Leí prattski.com/2014/09/23/using-the-magento-registry-mageregister antes de publicar: P ¿Pero cómo mapeará Magento la variable y el usuario?
Hashid
1
@Hashid, también puedes tener más ideas con el blog de Alan. cómo funciona el registro con cada solicitud en el código siguiente. alanstorm.com/magento_registry_singleton_tutorial
liyakat
lee eso también :-)
Hashid