Magento 2 Registry – це клас, який використовується для обміну даними між об’єктами в Magento.

Наприклад, зберегти об’єкт до Registry у класі контролера та отримати його у класі блоку.

Починаючи з Magento 2.3, клас Registry був оголошений застарілим, але багато розробників, постачальників розширень і навіть основного коду Magento все ще використовують його.

Як це працює?

Щоб отримати об’єкт Registry у вашому класі, вам потрібно визначити його в конструкторі, наприклад:

/**
* @var \Magento\Framework\Registry
*/
private $registry;

/**
* ...
* @param \Magento\Framework\Registry $registry,
*/
public function __construct(
...,
\Magento\Framework\Registry $registry,
...
) {
$this->registry = $registry;
...
}

або ви можете легко отримати його через Менеджер об'єктів для цілей тестування:

$registry = \Magento\Framework\App\ObjectManager::getInstance()
   ->get(\Magento\Framework\Registry::class);

Як встановити нове значення в Registry?

Щоб встановити нове значення в регістр, скористайтеся методом public function register($key, $value, $graceful = false) .

Приклад:

$this->registry->register('my_value', 5);

Якщо ви не встановите параметр $graceful або його значення дорівнює false, а ключ вже існує в реєстрі, ви отримаєте помилку "'Ключ реєстру{{key_name}}вже існує'".

Як ОТРИМАТИ значення з реєстру?

Щоб отримати значення з реєстру, будь ласка, скористайтеся функцією public function registry($key) .

Приклад:

$this->registry->registry('my_value');

Якщо ключа немає в реєстрі, функція поверне null.

Як ВИДАЛИТИ значення з реєстру?

Щоб видалити значення з реєстру, будь ласка, скористайтеся функцією public function unregister($key) .

Приклад:

$this->registry->unregister('my_value');

Якщо ключа немає в реєстрі, функція просто нічого не робитиме.

Приклади використання реєстру Magento 2

Тепер давайте розглянемо деякі з найпоширеніших прикладів.

Як отримати поточний ПРОДУКТ у Magento?

public function getCurrentProduct()
{
    /* @var \Magento\Framework\Registry */
    return $this->registry->registry('current_product');
}

Як отримати поточну КАТЕГОРІЮ у Magento?

public function getCurrentCategory()
{
    /* @var \Magento\Framework\Registry */
    return $this->registry->registry('current_category');
}

Як отримати поточну СТОРІНКУ CMS у Magento?

public function getCurrentPage()
{
    /* @var \Magento\Framework\Registry */
    return $this->registry->registry('current_cms_page');
}

Як отримати актуальний БЛОГ-ПОСТ Magefan у Magento?

public function getCurrentPost()
{
    /* @var \Magento\Framework\Registry */
    return $this->registry->registry('current_blog_post');
}

Як отримати актуальну КАТЕГОРІЮ БЛОГУ Magefan у Magento?

public function getCurrentBlogCategory()
{
    /* @var \Magento\Framework\Registry */
  return $this->registry->registry('current_blog_category');
}

Як отримати актуальний ТЕГ БЛОГУ Magefan у Magento?

public function getCurrentTag()
{
    /* @var \Magento\Framework\Registry */
    return $this->registry->registry('current_blog_tag');
}

Як отримати актуального АВТОРА БЛОГУ Magefan у Magento?

public function getCategory()
{
    /* @var \Magento\Framework\Registry */
    return $this->registry->registry('current_blog_author');
}