Magento Fehlermeldung

Wir hatten das Problem, dass wir von folgender Fehlermeldung beim Laden der Magento Seite begrüßt wurden:

 

Magento\Framework\Serialize\Serializer\Serialize>Magento\Framework\Serialize\Serializer\{closure}(8, 'unserialize(): ...', 'C:\\xampp\\...', 42, Array)

 

Das Kuriose an dieser Meldung war jedoch, dass wir dieses Problem eigentlich schon gelöst hatten. Allerdings auf einer anderen Lokalinstallation. Nach der Synchronisation per Git trat dieser Fehler auf 2 der 3 Lokalinstallationen wieder auf, obwohl die Lösung vollständig übertragen wurde.

 

Nach einiger Zeit des Suchens haben wir die Lösung gefunden.

 

 

Doch der Reihe nach. Die Ursprungslösung war folgende:

 

Im ersten Schritt öffnen Sie die Datei:

 

App/code/Diglin/Serialize/Serializer/Json.php

 

Dort löschen Sie den gesamten Inhalt der Datei raus und ersetzen diesen durch den folgenden Code:

 

namespace Diglin\Username\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;

}

}

 

Als nächstes ergänzen Sie in der Datei

 

App/etc/di.xml

 

Folgendes

 

 

< preference for="Magento\Framework\Indexer\Config\DependencyInfoProviderInterface" type="Magento\Framework\Indexer\Config\DependencyInfoProvider" />

 

Und genau hier liegt der Unterschied zwischen unserer Ursprungslösung und der neuen.

 

Wenn man nämlich den oben genannten Code unterhalb von

 

<preference for="Magento\Framework\Serialize\Serializer\Json" type="Diglin\Username\Serialize\Serializer\Json" />

 

setzt, wird der Fehler weiterhin erzeugt. Wird der Code allerdings oberhalb von diesem gesetzt, funktioniert dieser einwandfrei.