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

напр. зберегти об'єкт у реєстрі в класі контролера і перейти до класу блоку.

Починаючи з 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;
...
}

або ви можете легко дістати його через Object Manager з метою тестування:

$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, а ключ уже існує в реєстрі, ви отримаєте повідомлення про помилку "'Registry key  {{key_name}}  already exists'".

Як ОТРИМАТИ значення з Registry?

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

Приклад:

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

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

Як ВИДАЛИТИ значення з Registry?

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

Приклад:

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

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

Приклади використання Magento 2 Registry

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

Як отримати поточний ПРОДУКТ у 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');
}