Comprensione del registro Magento


13

Mi sono sempre chiesto, dove sono archiviati tutti i dati di registro in Magento?

So che anche gli oggetti singleton sono memorizzati nel registro. E il registro è solo una variabile di matrice statica della classe Mage .

Ho un paio di domande qui per chiarire la mia confusione:

  1. Il registro è diverso per utenti diversi? Voglio dire, è stato creato su una base per utente (per richiesta HTTP )?

Per esempio,

Mage::register('foo', 'Hello World'); //set a value for foo
Mage::registry('foo'); //will this return hello world for all HTTP users ?
  1. I dati del registro sono archiviati in sessioni? In caso contrario, in che modo Magento identificherà quale utente ha invocato i dati del registro?

Ho letto l' articolo sul blog di Alan Storm e la sua risposta su StackOverFlow al riguardo. Ma non potevo uccidere la confusione. Per favore, correggimi Se pensi che le mie basi siano incasinate. Grazie




grazie Amit Bera, stavo leggendo quell'articolo e la risposta SOF di Alan prima di pubblicare questa domanda. Non sono riuscito a ottenere le mie risposte da lì.
Hashid,

Risposte:


23

Il registro memorizza i dati nella memoria che è specifica per quella richiesta (piuttosto che l'utente o qualsiasi altra cosa) e persiste solo per la durata di quella richiesta. Il principio è davvero molto semplice, la Mageclasse viene istanziata come oggetto singleton per ogni richiesta e l'oggetto Mage istanziato rimane in memoria ed è accessibile in tutte le classi (e modelli) fino al completamento della richiesta e all'invio della risposta.

Poiché l'oggetto è un singleton, ogni volta che si accede ad esso si ottiene lo stesso oggetto. Tutto ciò che sta accadendo è che stai memorizzando valori su questo oggetto, quindi quando una classe memorizza un valore e un'altra vi accede, entrambi lavorano sullo stesso oggetto e la seconda classe è in grado di recuperare il valore impostato dalla prima classe.


1
Quindi è vivo solo per UNA richiesta? Significa che se carico una pagina in Magento, una richiesta è FATTA e i dati del registro vengono scaricati?
Hashid,

4
Sì, i valori impostati con Mage::register()persist sono solo per quella richiesta. Se si desidera archiviare dati specifici dell'utente, è necessario utilizzare la sessione, il registro è progettato per rendere i dati portatili tra le classi.
Jonathan Hussey,

1
ha senso! Lo stesso vale per l'istanza singleton?
Hashid,

1
Sì, esattamente lo stesso: se si osserva il getSingleton()metodo della Mageclasse, in realtà memorizza i dati nel registro.
Jonathan Hussey,

3

Il registro è archiviato in memoria ed è per richiesta HTTP, quindi non è possibile condividere dati tra richieste o utenti diversi.


Ma come Magento mapperà la richiesta HTTP e il registro?
Hashid,

2

Registro Magento memorizzato nella memoria dell'applicazione .

ogni volta che lo script viene eseguito, tutto ciò che è stato archiviato nel registro scompare, quindi non è necessario preoccuparsi di cancellarlo (a meno che lo script in esecuzione stia archiviando oggetti di grandi dimensioni nel registro e esegua un ciclo di molti dati).

In tal caso, devi annullare la registrazione delle voci quando hai finito con esse.

il registro è solo una proprietà statica della classe Mage. vedere per i dettagli

ma non riuscivo ancora a trovare una buona spiegazione

2) per ogni utente ci sarà un registro separato per richiesta sul server.

spero che questo chiarisca poco nella tua mente


grazie liyakat. Ho letto prattski.com/2014/09/23/using-the-magento-registry-mageregister prima di pubblicare: P Ma come Magento mapperà la variabile e l'utente?
Hashid,

1
@Hashid, puoi avere altre idee anche sul blog di Alan. segue come funziona il registro con ogni richiesta nel codice. alanstorm.com/magento_registry_singleton_tutorial
liyakat

leggi anche questo :-)
Hashid,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.