Категории: Мадженто 2

Magento 2: registry (реестр)

Довольно часто при разработке модуля на Мадженто 2 нужно использовать кратковременную информацию. Например, чтобы записывать промежуточные данные в браузер клиента, мы используем куки (cookies), чтобы сохранять данные в пределах одного запроса — реестр (registry), а чтобы сохранять данные между запросами — сессии (sessions).

Сегодняшняя статья посвящена рассмотрению объектов реестра (registry) в Magento 2. Рассмотрим, что такое реестр (registry) в Magento 2, а также небольшие примеры его использования.

 

 

Registry (реестр) в Magento 2

Реестр предназначен для хранения данных, специфичных для этого запроса (а не пользователя, или чего-то еще), в памяти, и эти данные сохраняются только на время данного запроса.

Реестр дает возможность использовать «глобальные переменные» в Magento. Реестр выбрасывает исключение при попытке записать в него данные с уже существующим ключом (или просто игнорирует перезапись).

В Мадженто версий 1.х использовался очень простой принцип: класс Mage создается как singleton (одиночный) объект для каждого запроса, а экземпляр объекта Mage остается в памяти и доступен во всех классах (и шаблонах) до тех пор, пока запрос не завершится и не будет отправлен ответ.

Поскольку объект является singleton (одиночкой), всякий раз, когда вы обращаетесь к нему, вы получаете один и тот же объект. Вы сохраняете значения для этого объекта, поэтому, когда один класс сохраняет значение, а другой обращается к нему, они оба работают над одним и тем же объектом.

В Magento 1 мы использовали для работы Mage::register() и Mage::registry(). Но в платформе Magento2 были внесены изменения в эту реализацию. В новой версии платформы нам нужно использовать класс \Magento\Framework\Registry, который принимает настройки и реестр данных, и который мы можем включать в любой конструктор.

 

Пример включения реестра в конструктор:

namespace SebWeo\Hello\Controller\Index;
class Index extends \Magento\Framework\App\Action\Action
{
  protected $_registry;
  public function __construct(
    …,
    \Magento\Framework\Registry $registry
  ) {
     $this->_registry = $registry;
     …
 }
 …

}

 

 

Пример установки и получения собственной переменной в реестре:

…
/* Установка пользовательской переменной для использования в реестре */public function setCustomVariable()
{
  $this->_registry->register('some_var', 'Значение переменной');
}

/*
* Получение пользовательской переменной из реестра
* @return string
*/public function getCustomVariable()
{
  return $this->_registry->registry('some_var');
}
…

 

 

Чтобы получить доступ к переменной, используется следующий формат кода:

$this->_registry->registry('some_var');

 

 

Как извлекать глобальные объекты реестра Magento 2

Используя пример из предыдущего раздела, мы можем установить переменную в реестре в контроллере, блоке и получить доступ к ней в любом месте, например, помощнике (helper), блоке, модели и т.д., но только в том же запросе.

Важно. Если мы будем обращаться к реестру из класса, нам нужно будет снова включать класс \Magento\Framework\Registry в конструктор этого класса.

Подобным образом мы можем извлекать глобальные объекты реестра Magento 2, такие как текущий товар, категория, CMS страница, CMS блок и т.д. Вам просто нужно следовать нижеприведенному фрагменту кода, чтобы работать с объектами реестра в Magento 2:

 

…
/**
* @return \Magento\Catalog\Model\Product
*/public function getProduct()
{
  return $this->_registry->registry('current_product');
}

/**
* @return \Magento\Catalog\Model\Category
*/public function getCurrentCategory()
{
  return $this->_registry->registry('current_category');
}
…

 

 

Надеемся, что с помощью сегодняшней статьи вы узнали больше о реестре в Magento 2. Если вам есть, что сказать по данной теме, не стесняйтесь сделать это в разделе комментирования ниже.

 

Share
Теги: Magento2

Последние посты

Самые красивые и впечатляющие мосты со всего мира (ТОП-10)

Мост — это нечто большее, чем просто сооружение, соединяющее два берега. Для того, чтобы появился… Читать далее

19/04/2024

Соломон

Жизнь нас учит, что свою пару мы познаем, когда разводимся, своих братьев мы познаем, когда… Читать далее

18/04/2024

Чак Паланик

Кто может — тот делает. Кто не может — тот критикует Чак Паланик   Читать далее

17/04/2024

Ричард Бах

Ни одно желание не дается тебе отдельно от силы, позволяющей его осуществить. Хотя, возможно, для… Читать далее

16/04/2024

Стивен Кинг

Жизнь – это непрерывный опыт, и даже самые плохие моменты занимают свое место в пазле… Читать далее

15/04/2024

неизвестный автор

Люди, которые любят одиночество, дорого заплатили за дружбу с кем-то... неизвестный автор   Читать далее

14/04/2024