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. Якщо вам є, що сказати по цій темі, не соромтеся зробити це в розділі коментування нижче.
This post was last modified on 25/09/2018 20:33
Останні пости
Генрі Форд
Людина має два мотиви поведінки — один справжній та інший, що гарно звучить Генрі Форд…
Фрідріх Ніцше
Не треба додумувати надто багато. Так ви створюєте проблеми, яких не існувало Фрідріх Ніцше
Такий різний інвертор! Вибираємо між кондиціонерами Inverter, Inverter DC та Full DC
Літо в розпалі, а значить якраз час задуматися про покупку кондиціонера. Але як не загубитися…
Корисні поради щодо вибору розсувних дверей
Варто знати, що функціональність і дизайн працюють рука об руку, коли ви використовуєте розсувні двері.…