Ich habe die Website von 2.1.6 auf 2.2.1 aktualisiert und kann den Wertfehler im Frontend und Backend nicht serialisieren.
{"0":"Unable to serialize value.","1":"#0 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/Translate.php(494): Magento\\Framework\\Serialize\\Serializer\\Json->serialize(Array)\n
#1 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/Translate.php(190): Magento\\Framework\\Translate->_saveCache()\n
#2 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/App\/Area.php(244): Magento\\Framework\\Translate->loadData(NULL, false)\n
#3 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/App\/Area.php(215): Magento\\Framework\\App\\Area->_initTranslate()\n
#4 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/App\/Area.php(142): Magento\\Framework\\App\\Area->_loadPart('translate')\n
#5 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/View\/DesignLoader.php(55): Magento\\Framework\\App\\Area->load('translate')\n
#6 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/App\/Action\/Plugin\/Design.php(48): Magento\\Framework\\View\\DesignLoader->load()\n
#7 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/Interception\/Interceptor.php(121): Magento\\Framework\\App\\Action\\Plugin\\Design->beforeDispatch(Object(Magento\\Cms\\Controller\\Index\\Index\\Interceptor), Object(Magento\\Framework\\App\\Request\\Http))\n
#8 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/Interception\/Interceptor.php(153): Magento\\Cms\\Controller\\Index\\Index\\Interceptor->Magento\\Framework\\Interception\\{closure}(Object(Magento\\Framework\\App\\Request\\Http))\n
#9 \/var\/www\/vhosts\/demo.com\/eiselec\/generated\/code\/Magento\/Cms\/Controller\/Index\/Index\/Interceptor.php(39): Magento\\Cms\\Controller\\Index\\Index\\Interceptor->___callPlugins('dispatch', Array, Array)\n
#10 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/App\/FrontController.php(55): Magento\\Cms\\Controller\\Index\\Index\\Interceptor->dispatch(Object(Magento\\Framework\\App\\Request\\Http))\n
#11 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/Interception\/Interceptor.php(58): Magento\\Framework\\App\\FrontController->dispatch(Object(Magento\\Framework\\App\\Request\\Http))\n
#12 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/Interception\/Interceptor.php(138): Magento\\Framework\\App\\FrontController\\Interceptor->___callParent('dispatch', Array)\n
#13 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/module-store\/App\/FrontController\/Plugin\/RequestPreprocessor.php(94): Magento\\Framework\\App\\FrontController\\Interceptor->Magento\\Framework\\Interception\\{closure}(Object(Magento\\Framework\\App\\Request\\Http))\n
#14 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/Interception\/Interceptor.php(135): Magento\\Store\\App\\FrontController\\Plugin\\RequestPreprocessor->aroundDispatch(Object(Magento\\Framework\\App\\FrontController\\Interceptor), Object(Closure), Object(Magento\\Framework\\App\\Request\\Http))\n
#15 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/module-page-cache\/Model\/App\/FrontController\/BuiltinPlugin.php(73): Magento\\Framework\\App\\FrontController\\Interceptor->Magento\\Framework\\Interception\\{closure}(Object(Magento\\Framework\\App\\Request\\Http))\n
#16 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/Interception\/Interceptor.php(135): Magento\\PageCache\\Model\\App\\FrontController\\BuiltinPlugin->aroundDispatch(Object(Magento\\Framework\\App\\FrontController\\Interceptor), Object(Closure), Object(Magento\\Framework\\App\\Request\\Http))\n
#17 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/Interception\/Interceptor.php(153): Magento\\Framework\\App\\FrontController\\Interceptor->Magento\\Framework\\Interception\\{closure}(Object(Magento\\Framework\\App\\Request\\Http))\n
#18 \/var\/www\/vhosts\/demo.com\/eiselec\/generated\/code\/Magento\/Framework\/App\/FrontController\/Interceptor.php(26): Magento\\Framework\\App\\FrontController\\Interceptor->___callPlugins('dispatch', Array, NULL)\n
#19 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/App\/Http.php(135): Magento\\Framework\\App\\FrontController\\Interceptor->dispatch(Object(Magento\\Framework\\App\\Request\\Http))\n
#20 \/var\/www\/vhosts\/demo.com\/eiselec\/vendor\/magento\/framework\/App\/Bootstrap.php(256): Magento\\Framework\\App\\Http->launch()\n
#21 \/var\/www\/vhosts\/demo.com\/eiselec\/index.php(39): Magento\\Framework\\App\\Bootstrap->run(Object(Magento\\Framework\\App\\Http))\n
#22 {main}","url":"\/","script_name":"\/index.php"}
Lassen Sie mich wissen, wie ich es lösen kann.
Vielen Dank
Antworten:
Ich habe das gleiche Verhalten mit einer Vorlage. Ich habe den Code für den Fehler in meinen Serializer kopiert, um mein Problem zu beheben.
Sobald ich zu de_DE wechsle und meinen statischen Code über neu generiere
Es wird "Fehlgebildete UTF-8-Zeichen, möglicherweise falsch codiert" ausgegeben.
Also habe ich die Dateien, die ich geändert habe, im Vorlagenordner (dh Code / Mytheme / Bannerslider / i18n / de_DE.csv) nachgeschlagen und über WinSCP heruntergeladen. Notepad ++ zeigte "Ansii Encoding" - schwer, ich habe "magento i18n: collect-phrases" für die zu erstellende Übersetzungsdatei verwendet.
app / code / MyTheme / Bannerslider / i18n / de_DE.csv US-ASCII
Also habe ich die Dateien manuell in Notepad ++ geändert, sie hochgeladen, den statischen Inhalt bereitgestellt und alle Berechtigungen zurückgesetzt - en voila es funktioniert.
Der Fehler könnte sich also in Ihrer i18n-CSV-Datei befinden.
quelle
Wie ich sehen kann, kommt dieser Fehler von der Methode:
und Serializer, der nicht gefunden wird, stammt von der Methode:
Die Präferenz für das
SerializerInterface
wurde seit der 2.2.x-Version von Magento hinzugefügt und in der App / etc / di.xml deklariert :Ich denke, Ihr Cache ist alt oder die Präferenz für
SerializerInterface
funktioniert nicht. Versuchen Sie, dieses Problem zu beheben, indem SieMagento\Framework\Serialize\SerializerInterface
irgendwo im Code die (mithilfe der Abhängigkeitsinjektion) aufrufen und überprüfen, welche Klasse von di zurückgegeben wird:Wenn keine Instanz der zurückgegebenen
Magento\Framework\Serialize\Serializer\Json
Klasse zurückgegeben wird, versuchen Sie, diese überschriebene Voreinstellung im Projekt zu durchsuchen und zu entfernen.Wenn Sie auf dem Remote-Server arbeiten, überprüfen Sie zunächst die
app/etc/di.xml
Datei auf dem Server direkt.Eine andere Möglichkeit, den Core
Json
Serializer vorübergehend zu ändern und zu überprüfen, welcher Fehler zurückgegeben wurde:Öffnen Sie die
magento/framework/Serialize/Serializer/Json.php
und ändern Sie diese Methode von:zu:
Dann können Sie nach der Ausnahmemeldung einen JSON-Fehler sehen. Möglicherweise sind Ihre Daten fehlerhaft. Beachten Sie, dass alle alten Daten während des Magento-Updates mit json in den Setup-Upgrade-Skripten unserialisiert und serialisiert werden sollten.
PS: Vergessen Sie nicht, die Kerndateien nach Abschluss des Debuggens zurückzusetzen! Der bessere Weg ist, xDebug für diesen Zweck zu verwenden.
quelle
Ich habe das gleiche Problem mit dem Upgrade auf 2.2.1 ausgeführt. Ich fand diesen Artikel sehr hilfreich http://devdocs.magento.com/guides/v2.2/ext-best-practices/tutorials/serialized-to-json-data-upgrade.html
In der Datenbank gespeicherte Daten sollten nicht mehr serialisiert werden, sondern jetzt als JSON-Objekt gespeichert werden.
Die meisten Module führen eine Datenaktualisierung durch, bei der die Daten in der Datenbank unserialisiert und erneut im JSON-Format gespeichert werden. (Übrigens hat es eine ganze Weile gedauert, dies auszuführen ...)
Wenn eines Ihrer Module Daten speichert, die in der Datenbank serialisiert sind und möglicherweise nicht mehr von Magento gelesen werden können, müssen Sie eine Setup-Datei für die Datenaktualisierung erstellen. Möglicherweise handelt es sich auch um ein Modul eines Drittanbieters, das auf eine mit 2.2+ kompatible Version aktualisiert werden muss.
Wenn Sie Daten irgendwo in Ihrem Code auf unserialisieren, müssen Sie dies möglicherweise auch ändern.
Ich hoffe, dies gibt Ihnen einen besseren Einblick in die Ursachen dieses Fehlers.
Prost!
quelle
generation
Ordner. ;)Ich bin genau in die gleiche Situation geraten. Nachdem ich den obigen Code hinzugefügt hatte, erhielt ich "Fehlerhafte UTF-8-Zeichen, möglicherweise falsch codiert".
Ich nehme an, dass Sie nicht die Standardsprache verwenden. Versuchen Sie, die Sprache auf "Standard" en_US zu ändern.
Meetanshi - Welche Sprache verwenden Sie im Front-End und schlägt auch die Erstellung statischer Inhalte fehl?
quelle
In meinem Fall war die Ursache für ein UTF8-Codierungsproblem eine nicht multibyte sichere Verkürzung der Produktnamen:
Also a
wurde
quelle
Seien Sie vorsichtig mit der Substr-Funktion. UTF-8 wird nicht unterstützt. Und das kann die FPC brechen. Verwenden Sie mb_substr
quelle
Für mich bestand die Lösung darin, alle Sonderzeichen wie "ä" in der CSV-Übersetzungsdatei durch HTML-Versionen desselben Zeichens wie folgt zu ersetzen:
Dann habe ich die Caches geleert und das Frontend neu geladen.
quelle