Categories: Мадженто 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
Published by
SebWeo
Tags: Magento2

Recent Posts

Как добавить свой текстовый блок перед формой комментариев в WordPress

Блок комментирования в сайтах CMS WordPress можно отнести к одной из важнейших составляющих ресурса. Комментарии…

8 часов ago

Билл Гейтс

Люди всегда переоценивают изменения за неделю, и недооценивают возможные достижения за год Билл Гейтс  

4 дня ago

Как исключить страницы из результатов поиска WordPress

Одной из замечательных особенностей платформы WordPress есть внутренний поиск. Однако функция поиска в CMS ВордПресс…

6 дней ago

Основные задачи болотного экскаватора: где и для чего он используется

Болотный экскаватор – это специализированная техника, предназначенная для работы в условиях повышенной влажности, на болотистых…

2 недели ago

Почему пластинчатые теплообменники являются оптимальным выбором для промышленности

Промышленные системы теплопередачи нуждаются в эффективных, надежных и экономичных решениях. Одним из наиболее распространенных и…

2 недели ago

Зигмунд Фрейд

Когда ты умер, ты об этом не знаешь. Только другим тяжело. То же самое, когда…

2 недели ago