Magento 2.2.0: Ошибка добавления товара в корзину не удается отменить сериализацию значения


Я создал типы продуктов подарочных карт и добавил пользовательские параметры, подобные этому

  1. Выберите сумму: Стоимость карты
  2. выберите дизайн:
  3. Напишите свой адрес электронной почты:

       To :
    
         Recipient Name
         Recipient Email
    
       Form :
    
         Sender Name
         Sender Email
    
  4. Заголовок:
  5. Сообщение:
  6. Дата отправки:
  7. Часовой пояс

Я добавил товар в "Добавить в корзину", но товар не обновляется mini cart и checkout/cart ошибка отображения страницы, подобная этой:

Исключение #0 (исключение InvalidArgumentException): Невозможно для несериализации ценности. #0 vendor/magento/module-catalog/Helper/Product/Configuration.php (118): Magento\Framework\Сериализация\Сериализатор\Json->несериализовать.

Как решить проблему этого типа?

Я попробовал ответы из " Ошибка Magento 2.2: Невозможно отменить сериализацию значения", но это не работает.


enter image description here

Author: Ravindrasinh Zala, 2017-12-06

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)
            ]);
        }
 2
Author: Ravindrasinh Zala, 2018-01-10 10:42:46