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:
- 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 ?
- 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
Odpowiedzi:
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,
Mage
klasa 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.
źródło
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.getSingleton()
metodęMage
klasy, faktycznie przechowuje ona dane w rejestrze.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.
źródło
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
źródło