Категорії: Мадженто 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
Теги: Мадженто2

Останні пости

Антуан де Сент-Екзюпері

Ніколи не втрачай терпіння — це останній ключ, що відкриває двері Антуан де Сент-Екзюпері   Читати далі

28/03/2024

Сомерсет Моем

Подорослішавши, ви збагнете, що світ стає стерпним за однієї умови: коли розумієш, що людський егоїзм… Читати далі

27/03/2024

Михайло Грушевський

Всі вчаться своєї рідної мови, а наша біда така, що треба вчитися її більше, ніж… Читати далі

26/03/2024

ТОП-5 покерних обмінників

Професійний покер – це численні турніри та великі гроші, що потребує правильного налаштування фінансових інструментів.… Читати далі

25/03/2024

Гай Юлій Цезар

Всі довкола прагнуть винищити ворогів, а не об'єднатися з друзями Гай Юлій Цезар   Читати далі

24/03/2024

Як вибрати оптимальний смартфон для дитини?

Сьогоднішні діти стикаються з технологіями вже в ранньому віці, і смартфон давно перестав бути просто… Читати далі

22/03/2024