Magento 2.2.0: Ошибка добавления товара в корзину не удается отменить сериализацию значения
Я создал типы продуктов подарочных карт и добавил пользовательские параметры, подобные этому
- Выберите сумму: Стоимость карты
- выберите дизайн:
-
Напишите свой адрес электронной почты:
To : Recipient Name Recipient Email Form : Sender Name Sender Email
- Заголовок:
- Сообщение:
- Дата отправки:
- Часовой пояс
Я добавил товар в "Добавить в корзину", но товар не обновляется mini cart
и checkout/cart
ошибка отображения страницы, подобная этой:
Исключение #0 (исключение InvalidArgumentException): Невозможно для несериализации ценности. #0 vendor/magento/module-catalog/Helper/Product/Configuration.php (118): Magento\Framework\Сериализация\Сериализатор\Json->несериализовать.
Как решить проблему этого типа?
Я попробовал ответы из " Ошибка Magento 2.2: Невозможно отменить сериализацию значения", но это не работает.
1 answers
Теперь у меня есть решение.
App/code/Vendor/Module/Helper/Data.php
public function getUnserializeData($data)
{
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$version = $objectManager->get('Magento\Framework\App\ProductMetadataInterface')->getVersion();
if($version >= '2.2.0'){
$returnData = $objectManager->get('Magento\Framework\Serialize\SerializerInterface')->unserialize($data);
}
else{
$returnData = (array) unserialize($data);
}
return $returnData;
}
public function getSerializeData($data)
{
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$version = $objectManager->get('Magento\Framework\App\ProductMetadataInterface')->getVersion();
if($version >= '2.2.0'){
$returnData = $objectManager->get('Magento\Framework\Serialize\SerializerInterface')->serialize($data);
}
else{
$returnData = serialize($data);
}
return $returnData;
}
App/code/Vendor/Module/Observer/CheckoutCartProductAddAfterObserver.php
$additionalOptions = [];
if ($additionalOption = $item->getOptionByCode('additional_options')) {
$additionalOptions = $this->_helper->getUnserializeData($additionalOption->getValue());
}
if (count($additionalOptions) > 0) {
$item->addOption([
'code' => 'additional_options',
'value' => $this->_helper->getSerializeData($additionalOptions)
]);
}