cancel
Showing results for 
Search instead for 
Did you mean: 

M2.3.5 - Move Core file

M2.3.5 - Move Core file

Hi,

 

vendor/magento/framework/Serialize/Serializer/Json.php

I have updated this core Magento file(but it's not good idea) and it should be moved to app/code

how can i do this? 

1 REPLY 1

Re: M2.3.5 - Move Core file

@gkarthick87 

 

Here you go:

 

https://magento.stackexchange.com/questions/239183/detecting-possible-issues-with-serialized-data-af...

https://magento.stackexchange.com/questions/194010/magento-2-2-unable-to-unserialize-value

 

By using preference method, we can override the Core Class "Magento\Framework\Serialize\Serializer\Json"

<preference for="Magento\Framework\Serialize\Serializer\Json" type="Namespace\ModuleName\Serialize\Serializer\Json" /> 

And create a file Json.php inside the directory Namespace\ModuleName\Serialize\Serializer

<?php
namespace Namespace\ModuleName\Serialize\Serializer;



class Json extends \Magento\Framework\Serialize\Serializer\Json
{


    /**
     * {@inheritDoc}
     * @since 100.2.0
     */
    public function unserialize($string)
    {
      if($this->is_serialized($string))
        {
            $string = $this->serialize($string);
        }
        $result = json_decode($string, true);
        if (json_last_error() !== JSON_ERROR_NONE) {
             throw new \InvalidArgumentException('Unable to unserialize value.');

        }
        return $result;
    }


    function is_serialized($value, &$result = null)
    {
    // Bit of a give away this one
        if (!is_string($value))
        {
            return false;
        }
        // Serialized false, return true. unserialize() returns false on an
        // invalid string or it could return false if the string is serialized
        // false, eliminate that possibility.
        if ($value === 'b:0;')
        {
            $result = false;
            return true;
        }
        $length = strlen($value);
        $end    = '';
        switch ($value[0])
        {
            case 's':
                if ($value[$length - 2] !== '"')
                {
                    return false;
                }
            case 'b':
            case 'i':
            case 'd':
                // This looks odd but it is quicker than isset()ing
                $end .= ';';
            case 'a':
            case 'O':
                $end .= '}';
                if ($value[1] !== ':')
                {
                    return false;
                }
                switch ($value[2])
                {
                    case 0:
                    case 1:
                    case 2:
                    case 3:
                    case 4:
                    case 5:
                    case 6:
                    case 7:
                    case 8:
                    case 9:
                        break;
                    default:
                        return false;
                }
            case 'N':
                $end .= ';';
                if ($value[$length - 1] !== $end[0])
                {
                    return false;
                }
                break;
            default:
                return false;
        }
        if (($result = @unserialize($value)) === false)
        {
            $result = null;
            return false;
        }
        return true;
    }
}

After this modification, It Works perfectly.

Manish Mittal
https://www.manishmittal.com/