Розуміння реєстру Magento


13

Мене завжди цікавить, де всі дані реєстру зберігаються в Magento?

Я знаю, що навіть одиночні об’єкти зберігаються в реєстрі. А реєстр - це лише статична змінна масиву класу Mage .

У мене тут є кілька запитань, щоб очистити свою плутанину:

  1. Чи відрізняється реєстр для різних користувачів? Я маю на увазі, чи створюється він на основі кожного користувача (за запитом HTTP )?

Наприклад,

Mage::register('foo', 'Hello World'); //set a value for foo
Mage::registry('foo'); //will this return hello world for all HTTP users ?
  1. Чи зберігаються дані реєстру в сесіях? Якщо ні, як Magento визначить, хто користувач викликав дані реєстру?

Я прочитав статтю в блозі Алана Шторма, а також його відповідь на StackOverFlow щодо цього. Але я не міг убити плутанину. Будь ласка, виправте мене. Якщо ви вважаєте, що мої основи переплутані. Спасибі




дякую Аміт Бера, я читав цю статтю та відповідь SOF від Алана, перш ніж ставити це питання. Я не міг отримати звідти своїх відповідей.
Хашид

Відповіді:


23

Реєстр зберігає дані в пам'ять, яка є специфічною для цього запиту (а не користувача або чогось іншого) і зберігається лише протягом цього запиту. Принцип дійсно дуже простий, Mageклас інстанціюється як однотонний об'єкт для кожного запиту, і інстанційований об'єкт Mage залишається в пам'яті і є доступним у всіх класах (і шаблонах), поки запит не завершиться і відповідь не буде надіслана.

Оскільки об'єкт є однотонним, кожного разу, коли ви отримуєте доступ до нього, ви отримуєте той самий об’єкт. Все, що відбувається, полягає в тому, що ви зберігаєте значення для цього об'єкта, тому коли один клас зберігає значення, а інший отримує доступ до нього, вони обидва працюють над одним об’єктом, а другий клас здатний отримати значення першого набору класів.


1
Так його живим лише за ОДИН запит? Значить, якщо я завантажую сторінку в Magento, один запит виконано "ДОСТАНОВО", а дані реєстру очищені?
Хашид

4
Так, значення, задані вами, Mage::register()зберігаються лише для цього запиту. Якщо ви хочете зберігати певні користувацькі дані, вам слід використовувати сеанс, реєстр справді просто створений для того, щоб зробити дані портативними між класами.
Джонатан Хуссі

1
що має сенс! Це ж стосується і одноосібного екземпляра?
Хашид

1
Так, точно так само - якщо подивитися getSingleton()метод Mageкласу, він фактично зберігає дані в реєстр.
Джонатан Хуссі

3

Реєстр зберігається в пам'яті та відповідає запиту HTTP, тому ви не можете обмінюватися даними між різними запитами або користувачами.


Але як Magento відобразить запит та реєстр HTTP?
Хашид

2

Реєстр Magento зберігається в пам'яті програми .

коли коли-небудь ваш сценарій буде запущений, те, що ви зберігали в реєстрі, більше не втрачається, тому не потрібно турбуватися про його очищення (якщо тільки запущений сценарій не зберігає великі об’єкти в реєстрі і прокручується багато дані).

У такому випадку вам доведеться скасувати реєстрацію своїх записів, коли ви закінчите з ними.

Реєстр - лише статична властивість класу Mage. див. подробиці

але все-таки я не міг знайти хорошого пояснення

2) для кожного користувача буде окремий реєстр на запит на сервері.

сподіваюся, що це стане мало зрозумілим у вашому розумі


дякую liyakat Я читав prattski.com/2014/09/23/using-the-magento-registry-mageregister перед публікацією: P Але як Magento відобразить змінну та користувача?
Хашид

1
@Hashid, ви можете отримати більше уявлень і в блозі Алана. як працює реєстр з кожним запитом у коді, слідуйте. alanstorm.com/magento_registry_singleton_tutorial
liyakat

читайте це також :-)
Хашид
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.