Question

i am trying to add product to cart with addition option but i ended up with message: "Unable to unserialize value." this error on console resoponse on section refresh.

Console

I am using checkout_cart_product_add_after event and observer code like below.

$item = $observer->getQuoteItem();
    $additionalOptions = array();
    if ($additionalOption = $item->getOptionByCode('additional_options')) {
        $additionalOptions = (array) unserialize($additionalOption->getValue());
    }

    $additionalOptions[] = [
        'label' => 'Additional Options Label',
        'value' => 'Additional Options Value',
    ];

    if (count($additionalOptions) > 0) {
        $item->addOption(array(
            'product_id' => $item->getProductId(),
            'code' => 'additional_options',
            'value' => serialize($additionalOptions),
        ));
    }
Was it helpful?

Solution

Use json_encode instead serialize

public function execute(EventObserver $observer) {

    $additionalOptions = array();
    if ($additionalOption = $item->getOptionByCode('additional_options')) {
        $additionalOptions = (array) unserialize($additionalOption->getValue());
    }
    $additionalOptions[] = [
        'label' => 'helllo',
        'value' => 'vaddfsd',
    ];

    if (count($additionalOptions) > 0) {
        $item->addOption(array(
            'code' => 'additional_options',
            'value' => json_encode($additionalOptions),
        ));
    }

}

OTHER TIPS

A lot of previously serlialised stuff in m2 is now json encoded. Try json decode instead?

Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top