J'ai mis à niveau le site Web de 2.1.6 à 2.2.1 et je ne peux pas sérialiser l'erreur de valeur dans le frontend et le backend.
{"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"}
Faites-moi savoir comment puis-je le résoudre.
Merci
Réponses:
j'ai le même comportement avec un modèle. J'ai copié le code de l'erreur sur mon sérialiseur pour obtenir mon problème.
Dès que je passe à de_DE et régénère mon code statique via
il lance "des caractères UTF-8 mal formés, éventuellement mal encodés".
J'ai donc recherché les fichiers que j'ai modifiés dans le dossier du modèle (par exemple code / Mytheme / Bannerslider / i18n / de_DE.csv) et les ai téléchargés via WinSCP. Notepad ++ montrait "Ansii Encoding" - difficile, j'ai utilisé "magento i18n: collect-phrases" pour le fichier de traduction à créer.
app / code / MyTheme / Bannerslider / i18n / de_DE.csv US-ASCII
J'ai donc changé les fichiers manuellement dans Notepad ++, les ai téléchargés, déployé le contenu statique et réinitialisé toutes les autorisations - en voila cela fonctionne.
Ainsi, le bogue pourrait être dans votre fichier csv i18n.
la source
Comme je peux le voir, cette erreur provient de la méthode:
et le sérialiseur non trouvé provient de la méthode:
La préférence pour le a
SerializerInterface
été ajoutée depuis la version 2.2.x de Magento, et déclarée dans l' application / etc / di.xml :Je pense donc que votre cache est ancien ou que la préférence pour le
SerializerInterface
ne fonctionne pas. Essayez de déboguer ce problème en appelant leMagento\Framework\Serialize\SerializerInterface
(à l'aide de l'injection de dépendance) quelque part dans le code, et vérifiez quelle classe retournée par di:Si elle ne retourne pas une instance de la
Magento\Framework\Serialize\Serializer\Json
classe retournée - essayez de rechercher cette préférence écrasée dans le projet et supprimez-la.Si vous travaillez sur le serveur distant - vérifiez d'abord le
app/etc/di.xml
fichier directement sur le serveur.Vous pouvez également modifier temporairement le
Json
sérialiseur principal et vérifier l'erreur renvoyée:Ouvrez le
magento/framework/Serialize/Serializer/Json.php
et modifiez cette méthode à partir de:à:
Ensuite, vous pouvez voir après le message d'exception une erreur json. Peut-être que vos données sont cassées. gardez à l'esprit que toutes les anciennes données doivent être non sérialisées et sérialisées à l'aide de json dans les scripts de mise à niveau de l'installation lors de la mise à jour de magento.
PS: n'oubliez pas de restaurer les fichiers core une fois le débogage terminé! La meilleure façon est d'utiliser xDebug à cet effet.
la source
Dans mon cas, la cause d'un problème de codage UTF8 était le raccourcissement sûr non multioctet des noms de produit:
Donc un
est devenu
la source
Soyez prudent avec la fonction substr. Il ne prend pas en charge UTF-8. Et cela peut briser le FPC. Utilisez mb_substr
la source
J'ai rencontré le même problème avec la mise à niveau vers 2.2.1. J'ai trouvé cet article très utile http://devdocs.magento.com/guides/v2.2/ext-best-practices/tutorials/serialized-to-json-data-upgrade.html
Les données stockées dans la base de données ne doivent plus être sérialisées, elles doivent maintenant être enregistrées en tant qu'objet JSON.
La plupart des modules effectuent une mise à jour des données qui désérialise les données dans la base de données et les stocke à nouveau sous un format JSON. (BTW Il a fallu un certain temps pour exécuter cela ...)
Par conséquent, si l'un de vos modules enregistre des données qui sont sérialisées dans la base de données et que ces données pourraient ne plus être lisibles par Magento, vous devrez créer un fichier d'installation de mise à niveau des données. Il peut également s'agir d'un module tiers qui doit être mis à jour vers une version compatible 2.2+.
Si vous sérialisez sur des données non sérialisées n'importe où dans votre code, vous devrez peut-être également changer cela.
J'espère que cela vous donne une meilleure idée de la cause de cette erreur.
À votre santé!
la source
generation
dossier. ;)Je me suis retrouvé exactement à la même situation. Après avoir ajouté le code ci-dessus, j'ai "des caractères UTF-8 mal formés, éventuellement incorrectement encodés"
Je suppose que vous n'utilisez pas la langue par défaut. Essayez de changer la langue en "par défaut" en_US.
Meetanshi - Quelle langue vous utilisez en front-end et la création de contenu statique échoue-t-elle également?
la source
Pour moi, la solution était de remplacer tous les caractères spéciaux comme "ä" dans le fichier de traduction csv par des versions html du même caractère comme ceci:
Ensuite, j'ai effacé les caches et rechargé le frontend.
la source