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
Tags: Magento2
Поддержи проект
Угости меня кофе

Buy Me A Coffee ☕😊💕

 

 

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

Аль Пачино

Никогда никому ничего не объясняйте. Все равно каждый поймет так, как ему выгодно Аль Пачино…

07/05/2024

SEO продвижение сайта: простые и эффективные инструкции

В современном мире все больше людей обращаются к интернету, чтобы найти информацию, товары и услуги.…

03/05/2024

Как добавить карту от Google Maps на свой сайт (с маркером и текстом)

В сегодняшнем практическом уроке мы рассмотрим пример добавления на свой сайт карты от сервиса Google…

02/05/2024

Как выбрать идеальный ноутбук: Полный гайд

Выбор ноутбука может быть сложной задачей в мире, где рынок переполнен вариантами на любой вкус…

22/04/2024

Томас Эдисон

Наша самая большая слабость заключается в том, что мы быстро сдаемся. Самый верный способ добиться…

20/04/2024

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

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

19/04/2024