Я обновил веб-сайт с 2.1.6 до 2.2.1 и столкнулся с невозможностью сериализации ошибки значения в веб-интерфейсе и бэкэнде.
{"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"}
Дайте мне знать, как я могу решить это.
Спасибо
Ответы:
У меня такое же поведение с шаблоном. Я скопировал код ошибки в мой сериализатор, чтобы получить мою проблему.
Как только я переключаюсь на de_DE и восстанавливаю свой статический код через
он выбрасывает «неправильно сформированные символы UTF-8, возможно, неправильно закодированные».
Поэтому я посмотрел файлы, которые я изменил, в папке шаблонов (т.е. code / Mytheme / Bannerslider / i18n / de_DE.csv) и загрузил их через WinSCP. Notepad ++ показывал «Ansii Encoding» - я использовал «magento i18n: collect-phrases» для создания файла перевода.
app / code / MyTheme / Bannerslider / i18n / de_DE.csv US-ASCII
Поэтому я вручную изменил файлы в Notepad ++, загрузил их, развернул статический контент и сбросил все разрешения - и все работает.
Итак, ошибка может быть в вашем CSV-файле i18n.
источник
Как я вижу, эта ошибка происходит от метода:
и сериализатор, который не найден, происходит из метода:
Предпочтение
SerializerInterface
было добавлено начиная с версии Magento версии 2.2.x и объявлено в приложении / etc / di.xml :Так что я думаю, что ваш кеш старый или предпочтение
SerializerInterface
не работает. Попробуйте отладить эту проблему, вызвавMagento\Framework\Serialize\SerializerInterface
(используя внедрение зависимостей) somwhere в коде, и проверьте, какой класс возвращен di:Если он возвращает не экземпляр
Magento\Framework\Serialize\Serializer\Json
возвращенного класса - попробуйте найти это перезаписанное предпочтение в проекте и удалить его.Если вы работаете на удаленном сервере - сначала проверьте
app/etc/di.xml
файл на сервере напрямую.Другой способ - временно изменить основной
Json
сериализатор и проверить, какая ошибка вернулась:Откройте
magento/framework/Serialize/Serializer/Json.php
и измените этот метод с:чтобы:
После сообщения об исключении вы можете увидеть ошибку json. Может быть, ваши данные повреждены. имейте в виду, что все старые данные должны быть не сериализованы и сериализованы с использованием json в сценариях обновления установки во время обновления magento.
PS: не забудьте вернуть обратно файлы ядра после завершения отладки! Для этого лучше использовать xDebug.
источник
В моем случае причиной проблемы кодировки UTF8 было не многобайтовое безопасное сокращение названий продуктов:
Так что
стал
источник
Будьте осторожны с функцией substr. Он не поддерживает UTF-8. И это может сломать FPC. Используйте mb_substr
источник
Я столкнулся с той же проблемой при обновлении до 2.2.1. Я нашел этот артикул очень полезным http://devdocs.magento.com/guides/v2.2/ext-best-practices/tutorials/serialized-to-json-data-upgrade.html
Данные, хранящиеся в БД, больше не должны быть сериализованы, теперь они должны быть сохранены как объект JSON.
Большинство модулей обновляют данные, которые десериализуют данные в БД и снова сохраняют их в формате JSON. (Кстати, это заняло довольно много времени ...)
Следовательно, если один из ваших модулей сохраняет данные, которые сериализованы в БД, эти данные могут быть недоступны для чтения Magento больше, вам потребуется создать файл установки обновления данных. Кроме того, это может быть сторонний модуль, который необходимо обновить до версии 2.2+.
Если вы выполняете сериализацию на несериализованных данных в любом месте вашего кода, вам, возможно, придется это изменить.
Я надеюсь, что это поможет вам лучше понять причину этой ошибки.
Ура!
источник
generation
папке. ;)Я оказался в той же ситуации. После добавления кода выше я получил «Неправильные символы UTF-8, возможно, неправильно закодированные»
Я полагаю, что вы не используете язык по умолчанию. Попробуйте изменить язык на «по умолчанию» en_US.
Meetanshi - Какой язык вы используете в front-end, и создание статического контента также не удается?
источник
Для меня решение состояло в том, чтобы заменить все специальные символы, такие как «ä» в CSV-файле перевода, на HTML-версии одного и того же символа, например:
Затем я очистил кеши и перезагрузил интерфейс.
источник