Magento 2 Registry — це клас, який використовується для обміну даними між об’єктами в Magento.
напр. зберегти об'єкт у реєстрі в класі контролера і перейти до класу блоку.
Починаючи з Magento 2.3, клас Registry був оголошений застарілим, але багато розробників, постачальників розширень і навіть код ядро Magento все ще використовують його.
Зміст [приховати]
- Як це працює?
- Приклади використання Magento 2 Registry
- Як отримати поточний ПРОДУКТ у Magento?
- Як отримати поточну КАТЕГОРІЮ в Magento?
- Як отримати поточну CMS СТОРІНКУ в Magento?
- Як отримати поточну ПУБЛІКАЦІЮ БЛОГУ Magefan в Magento?
- Як отримати поточну КАТЕГОРІЮ БЛОГУ Magefan в Magento?
- Як отримати поточний ТЕГ БЛОГУ Magefan в Magento?
- Як отримати поточного АВТОРА БЛОГУ Magefan в 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');
}