Область действия помощника (при получении через Mage::helper())
Я пытаюсь понять пару вещей об объеме и сроке службы вспомогательных классов. Я думаю, что понял, но для меня очень важно быть уверенным.
Итак, не могли бы вы, пожалуйста, сказать мне, прав ли я относительно следующих предположений о сфере применения помощника?
- помощник по умолчанию является одноэлементным (например, при вызове
Mage::helper()
это то же самое, что и вызовgetSingleton()
). - синглтон находится только в области действия http-запроса, например, следующий http-запрос больше не будет иметь эти синглеты. то же правило применимо и к помощникам.
- можно использовать хранилище сеансов для помощника, что позволит экземпляру помощника работать в течение всего сеанса пользователя, но по умолчанию он не основан на сеансе .
- вызов одного и того же помощника из разных модулей (при обработке одного и того же запроса) вернет один и тот же экземпляр. например, вспомогательный одноэлементный экземпляр можно использовать для передачи данных между модулями? (Я не спрашиваю, правильно ли это, просто если это возможно :))
- вызов одного и того же помощника из разных событий , которые запускаются из одного и того же http-запроса, вернет один и тот же экземпляр помощника.
- вызывающий помощник из обратного вызова задания cron всегда будет создавать новый экземпляр (потому что задание cron эквивалентно области http-запроса?)
Итак, я прав в отношении вышеперечисленных пунктов? Кто-нибудь может это подтвердить? Я провел некоторое тестирование и нашел кое-какую информацию здесь и там, но я хочу убедиться, что это ожидаемое определенное поведение, и не просто случайное поведение, которое может меняться между версиями и системами.
2 answers
Помощник будет жить только во время выполнения, поэтому #2 верно, он не будет сохраняться после запроса.
#3, конечно, вы можете сохранить любые данные, которые вы хотите от помощника, в ядро/сеанс, клиент/сеанс, оформление заказа/сеанс и т.д. # 4, # 5, # 6 должны возвращать один и тот же результат, несмотря ни на что. Вызов помощника из модели, контроллера, даже файла шаблона вернет тот же результат.
Мое единственное сомнение касается № 1. Я не уверен, что вы можете считать это синглетом. Я бы предположил, что это может зависеть от того, что он делает. Надеюсь, это поможет.
Все, что вы написали, является точным.
Чтобы уточнить поведение синглтона: оба, Mage::helper() и Mage::getSingleton(), найдите запись в реестре Magento (которая является глобальным хранилищем данных для каждого запроса) в форме _helper/module/class
или _singleton/module/class
, и если она не существует, создайте экземпляр помощника или синглтона и сохраните его в реестре.