Zrozumienie rejestru Magento

13

Zawsze zastanawiałem się, gdzie są przechowywane wszystkie dane rejestru w Magento?

Wiem, że nawet obiekty singletonowe są przechowywane w rejestrze. Rejestr jest tylko statyczną zmienną tablicową klasy Mage .

Mam tutaj kilka pytań, aby usunąć zamieszanie:

  1. Czy rejestr jest inny dla różnych użytkowników? Mam na myśli, czy jest on tworzony dla poszczególnych użytkowników (na żądanie HTTP )?

Na przykład,

Mage::register('foo', 'Hello World'); //set a value for foo
Mage::registry('foo'); //will this return hello world for all HTTP users ?
  1. Czy dane rejestru są przechowywane w sesjach? Jeśli nie, w jaki sposób Magento zidentyfikuje, który użytkownik wywołał dane rejestru?

Przeczytałem artykuł na blogu Alana Storma, a także jego odpowiedź na StackOverFlow na ten temat. Ale nie mogłem zabić zamieszania. Proszę mnie poprawić Jeśli myślę, że moje podstawy są popsute. Dzięki

Hashid
źródło
dzięki Amit Bera, przed opublikowaniem tego pytania czytałem ten artykuł i odpowiedź SOF autorstwa Alana. Stamtąd nie mogłem uzyskać odpowiedzi.
Hashid

Odpowiedzi:

23

Rejestr przechowuje w pamięci dane specyficzne dla tego żądania (zamiast użytkownika lub czegokolwiek innego) i trwa tylko przez czas trwania tego żądania. Zasada jest naprawdę bardzo prosta, Mageklasa jest tworzona jako obiekt singletonu dla każdego żądania, a instancja obiektu Mag pozostaje w pamięci i jest dostępna we wszystkich klasach (i szablonach), dopóki żądanie się nie zakończy i odpowiedź nie zostanie wysłana.

Ponieważ obiekt jest singletonem, za każdym razem, gdy uzyskujesz do niego dostęp, otrzymujesz ten sam obiekt. Wszystko, co się dzieje, polega na tym, że przechowujesz wartości w tym obiekcie, więc gdy jedna klasa przechowuje wartość, a inna uzyskuje do niej dostęp, obie pracują nad tym samym obiektem, a druga klasa jest w stanie pobrać wartość z pierwszego zestawu klas.

Jonathan Hussey
źródło
1
Czyli żyje tylko na JEDEN wniosek? Oznacza to, że jeśli załaduję stronę w Magento, jedno żądanie zostanie WYKONANE, a dane rejestru zostaną usunięte?
Hashid
4
Tak, wartości, które ustawiłeś za pomocą Mage::register()keep dla tego żądania. Jeśli chcesz przechowywać dane specyficzne dla użytkownika, powinieneś skorzystać z sesji, rejestr jest tak naprawdę zaprojektowany, aby dane były przenośne między klasami.
Jonathan Hussey,
1
to ma sens! To samo dotyczy również instancji singleton?
Hashid
1
Tak, dokładnie tak samo - jeśli spojrzysz na getSingleton()metodę Mageklasy, faktycznie przechowuje ona dane w rejestrze.
Jonathan Hussey,
3

Rejestr jest przechowywany w pamięci i jest zgodny z żądaniem HTTP, więc nie można udostępniać danych między różnymi żądaniami lub użytkownikami.

Vladimir Kerkhoff
źródło
Ale w jaki sposób Magento mapuje żądanie HTTP i rejestr?
Hashid
2

Rejestr Magento przechowywany w pamięci aplikacji .

kiedy skrypt zostanie uruchomiony, zniknie to, co zostało zapisane w rejestrze, więc nie trzeba się martwić o jego wyczyszczenie (chyba że skrypt, który uruchamiasz, przechowuje duże obiekty w rejestrze i przechodzi przez wiele dane).

W takim przypadku musisz wyrejestrować swoje wpisy po ich zakończeniu.

Rejestr jest tylko statyczną własnością klasy Mage. zobacz szczegóły

ale nadal nie mogłem znaleźć dobrego wyjaśnienia

2) dla każdego użytkownika na serwerze będzie osobny rejestr dla każdego żądania.

mam nadzieję, że to niewiele wyjaśni w twoim umyśle

liyakat
źródło
dzięki liyakat. Przeczytałem prattski.com/2014/09/23/using-the-magento-registry-mageregister przed wysłaniem: P Ale jak Magento zmapuje zmienną i użytkownika?
Hashid
1
@Hashid, możesz także uzyskać więcej pomysłów na blogu Alana. jak działa rejestr przy każdym żądaniu w kodzie. alanstorm.com/magento_registry_singleton_tutorial
liyakat
przeczytaj również :-)
Hashid