Область действия помощника (при получении через Mage::helper())


Я пытаюсь понять пару вещей об объеме и сроке службы вспомогательных классов. Я думаю, что понял, но для меня очень важно быть уверенным.

Итак, не могли бы вы, пожалуйста, сказать мне, прав ли я относительно следующих предположений о сфере применения помощника?

  1. помощник по умолчанию является одноэлементным (например, при вызове Mage::helper() это то же самое, что и вызов getSingleton()).
  2. синглтон находится только в области действия http-запроса, например, следующий http-запрос больше не будет иметь эти синглеты. то же правило применимо и к помощникам.
  3. можно использовать хранилище сеансов для помощника, что позволит экземпляру помощника работать в течение всего сеанса пользователя, но по умолчанию он не основан на сеансе .
  4. вызов одного и того же помощника из разных модулей (при обработке одного и того же запроса) вернет один и тот же экземпляр. например, вспомогательный одноэлементный экземпляр можно использовать для передачи данных между модулями? (Я не спрашиваю, правильно ли это, просто если это возможно :))
  5. вызов одного и того же помощника из разных событий , которые запускаются из одного и того же http-запроса, вернет один и тот же экземпляр помощника.
  6. вызывающий помощник из обратного вызова задания cron всегда будет создавать новый экземпляр (потому что задание cron эквивалентно области http-запроса?)

Итак, я прав в отношении вышеперечисленных пунктов? Кто-нибудь может это подтвердить? Я провел некоторое тестирование и нашел кое-какую информацию здесь и там, но я хочу убедиться, что это ожидаемое определенное поведение, и не просто случайное поведение, которое может меняться между версиями и системами.

Author: 7ochem, 2016-01-03

2 answers

Помощник будет жить только во время выполнения, поэтому #2 верно, он не будет сохраняться после запроса.

#3, конечно, вы можете сохранить любые данные, которые вы хотите от помощника, в ядро/сеанс, клиент/сеанс, оформление заказа/сеанс и т.д. # 4, # 5, # 6 должны возвращать один и тот же результат, несмотря ни на что. Вызов помощника из модели, контроллера, даже файла шаблона вернет тот же результат.

Мое единственное сомнение касается № 1. Я не уверен, что вы можете считать это синглетом. Я бы предположил, что это может зависеть от того, что он делает. Надеюсь, это поможет.

 4
Author: RussellAlbin, 2016-01-04 10:02:04

Все, что вы написали, является точным.

Чтобы уточнить поведение синглтона: оба, Mage::helper() и Mage::getSingleton(), найдите запись в реестре Magento (которая является глобальным хранилищем данных для каждого запроса) в форме _helper/module/class или _singleton/module/class, и если она не существует, создайте экземпляр помощника или синглтона и сохраните его в реестре.

 4
Author: Fabian Schmengler, 2016-01-03 19:47:15