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');
}