Zaktualizowałem witrynę z wersji 2.1.6 do wersji 2.2.1 i mam problem z niemożnością serializacji błędu wartości w interfejsie użytkownika.
{"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"}
Daj mi znać, jak mogę to rozwiązać.
Dzięki
Odpowiedzi:
Mam takie samo zachowanie z szablonem. Skopiowałem kod błędu do mojego serializatora, aby uzyskać problem.
Jak tylko przejdę na de_DE i ponownie wygeneruję mój kod statyczny poprzez
wyrzuca „Zniekształcone znaki UTF-8, być może niepoprawnie zakodowane”.
Poszukałem więc plików, które zmieniłem w folderze szablonów (tj. Code / Mytheme / Bannerslider / i18n / de_DE.csv) i pobrałem je przez WinSCP. Notepad ++ pokazał „Kodowanie Ansii” - ciężko użyłem „magento i18n: zbierać frazy” do utworzenia pliku tłumaczenia.
app / code / MyTheme / Bannerslider / i18n / de_DE.csv US-ASCII
Więc ręcznie zmieniłem pliki w Notepad ++, załadowałem je, wdrożyłem zawartość statyczną i zresetowałem wszystkie uprawnienia - en voila to działa.
Tak więc błąd może znajdować się w pliku csv i18n.
źródło
Jak widzę ten błąd pochodzi z metody:
a serializator, który nie został znaleziony, pochodzi z metody:
Preferencje
SerializerInterface
zostały dodane od wersji Magento 2.2.xi zadeklarowane w aplikacji / etc / di.xml :Więc myślę, że twoja pamięć podręczna jest stara lub preferencja
SerializerInterface
nie działa. Spróbuj debugować ten problem, wywołującMagento\Framework\Serialize\SerializerInterface
(przy użyciu wstrzykiwania zależności) gdzieś w kodzie i sprawdź, która klasa zwróciła di:Jeśli nie zwraca instancji
Magento\Framework\Serialize\Serializer\Json
klasy, spróbuj wyszukać tę nadpisaną preferencję w projekcie i usuń ją.Jeśli pracujesz na zdalnym serwerze - najpierw sprawdź
app/etc/di.xml
plik na serwerze bezpośrednio.Innym sposobem na tymczasowe zmodyfikowanie podstawowego
Json
serializatora i sprawdzenie, który błąd zwrócił:Otwórz
magento/framework/Serialize/Serializer/Json.php
i zmień tę metodę z:do:
Następnie po komunikacie wyjątku zobaczysz błąd JSON. Być może Twoje dane są uszkodzone. pamiętaj, że wszystkie stare dane powinny być niezserializowane i zserializowane przy użyciu json w skryptach aktualizacji instalatora podczas aktualizacji Magento.
PS: nie zapomnij przywrócić podstawowych plików po zakończeniu debugowania! Lepszym sposobem jest użycie do tego celu xDebug.
źródło
W moim przypadku przyczyną problemu z kodowaniem UTF8 było skrócenie nazw produktów, które nie są wielobajtowe:
Więc
stał się
źródło
Uważaj na funkcję substr. Nie obsługuje UTF-8. A to może złamać FPC. Użyj mb_substr
źródło
Wystąpił ten sam problem z aktualizacją do wersji 2.2.1. Uważam, że ten artykuł jest bardzo pomocny http://devdocs.magento.com/guides/v2.2/ext-best-practices/tutorials/serialized-to-json-data-upgrade.html
Dane przechowywane w bazie danych nie powinny być już serializowane, należy je teraz zapisać jako obiekt JSON.
Większość modułów dokonuje aktualizacji danych, która odserializuje dane w bazie danych i przechowuje je ponownie w formacie JSON. (BTW Uruchomienie tego zajęło sporo czasu ...)
Dlatego jeśli jeden z Twoich modułów zapisuje dane, które są serializowane w DB, że dane mogą nie być odczytywane przez Magento, będziesz musiał utworzyć plik instalacyjny aktualizacji danych. Może to być także moduł innej firmy, który wymaga aktualizacji do wersji zgodnej z wersją 2.2+.
Jeśli serializujesz dane, które nie są serializowane, w dowolnym miejscu w kodzie, być może będziesz musiał to zmienić.
Mam nadzieję, że daje to lepszy wgląd w przyczyny tego błędu.
Twoje zdrowie!
źródło
generation
folderu. ;)Skończyło się dokładnie na tej samej sytuacji. Po dodaniu powyższego kodu otrzymałem „Zniekształcone znaki UTF-8, być może niepoprawnie zakodowane”
Przypuszczam, że nie używasz domyślnego języka. Spróbuj zmienić język na „default” en_US.
Meetanshi - Jakiego języka używasz w interfejsie i czy tworzenie zawartości statycznej również nie działa?
źródło
Dla mnie rozwiązaniem było zastąpienie wszystkich znaków specjalnych, takich jak „ä” w pliku csv tłumaczenia, wersjami HTML tego samego znaku, jak poniżej:
Potem wyczyściłem pamięć podręczną i ponownie załadowałem interfejs.
źródło