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. Если вам есть, что сказать по данной теме, не стесняйтесь сделать это в разделе комментирования ниже.
Последние посты
Самые красивые и впечатляющие мосты со всего мира (ТОП-10)
Мост — это нечто большее, чем просто сооружение, соединяющее два берега. Для того, чтобы появился… Читать далее
Соломон
Жизнь нас учит, что свою пару мы познаем, когда разводимся, своих братьев мы познаем, когда… Читать далее
Чак Паланик
Кто может — тот делает. Кто не может — тот критикует Чак Паланик Читать далее
Ричард Бах
Ни одно желание не дается тебе отдельно от силы, позволяющей его осуществить. Хотя, возможно, для… Читать далее
Стивен Кинг
Жизнь – это непрерывный опыт, и даже самые плохие моменты занимают свое место в пазле… Читать далее
неизвестный автор
Люди, которые любят одиночество, дорого заплатили за дружбу с кем-то... неизвестный автор Читать далее