Saya telah memutakhirkan situs web dari 2.1.6 ke 2.2.1 dan menghadapi Tidak dapat membuat kesalahan nilai serialisasi di frontend dan 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"}
Biarkan saya tahu bagaimana saya bisa mengatasinya.
Terima kasih
Jawaban:
saya memiliki perilaku yang sama dengan templat. Saya menyalin kode untuk kesalahan ke serializer saya untuk mendapatkan masalah saya.
Segera setelah saya beralih ke de_DE dan membuat ulang kode statis saya melalui
itu melempar "karakter UTF-8 cacat, mungkin disandikan salah".
Jadi saya mencari file yang saya ubah di folder template (yaitu kode / Mytheme / Bannerslider / i18n / de_DE.csv) dan mengunduhnya melalui WinSCP. Notepad ++ menunjukkan "Ansii Encoding" - sulitnya saya menggunakan "magento i18n: collect-phrases" untuk membuat file terjemahan.
app / code / MyTheme / Bannerslider / i18n / de_DE.csv US-ASCII
Jadi saya mengubah file secara manual di Notepad ++, mengunggahnya, menyebarkan konten statis dan mengatur ulang semua izin - dan voila berfungsi.
Jadi, bug tersebut mungkin ada di file csv i18n Anda.
sumber
Seperti yang saya lihat kesalahan ini berasal dari metode:
dan serializer yang tidak ditemukan berasal dari metode:
Preferensi untuk
SerializerInterface
ditambahkan sejak versi 2.2.x dari Magento, dan dideklarasikan di app / etc / di.xml :Jadi saya pikir cache Anda sudah tua atau preferensi untuk
SerializerInterface
tidak berfungsi. Cobalah untuk men-debug masalah ini dengan memanggilMagento\Framework\Serialize\SerializerInterface
(menggunakan injeksi ketergantungan) di suatu tempat dalam kode, dan memeriksa kelas mana yang dikembalikan oleh di:Jika itu kembali bukan turunan dari
Magento\Framework\Serialize\Serializer\Json
kelas yang dikembalikan - coba cari preferensi yang ditimpa ini dalam proyek dan hapus.Jika Anda bekerja pada server jarak jauh - periksa dulu
app/etc/di.xml
file di server secara langsung.Cara lain Anda untuk sementara dapat memodifikasi
Json
serializer inti dan memeriksa kesalahan yang dikembalikan:Buka
magento/framework/Serialize/Serializer/Json.php
dan ubah metode ini dari:untuk:
Maka Anda dapat melihat setelah pesan pengecualian kesalahan json. Mungkin data Anda rusak. perlu diingat bahwa semua data lama harus tidak di-serialisasi dan diserialisasi menggunakan json dalam skrip peningkatan pengaturan selama pembaruan magento.
PS: jangan lupa untuk mengembalikan kembali file inti setelah proses debug selesai! Cara yang lebih baik adalah menggunakan xDebug untuk tujuan itu.
sumber
Dalam kasus saya penyebab masalah Pengkodean UTF8, adalah pemendekan nama produk yang non-multibyte aman:
Jadi a
menjadi
sumber
Hati-hati dengan fungsi substr. Itu tidak mendukung UTF-8. Dan ini bisa merusak FPC. Gunakan mb_substr
sumber
Saya telah mengalami masalah yang sama dengan peningkatan ke 2.2.1. Saya menemukan artikel ini sangat membantu http://devdocs.magento.com/guides/v2.2/ext-best-practices/tutorials/serialized-to-json-data-upgrade.html
Data yang disimpan dalam DB tidak boleh diserialisasi lagi, sekarang harus disimpan sebagai objek JSON.
Sebagian besar modul membuat pembaruan data yang menguninstall data dalam DB dan menyimpannya kembali dalam format JSON. (BTW Butuh beberapa saat untuk menjalankan ini ...)
Oleh karena itu, jika salah satu modul Anda menyimpan data yang diserialisasi dalam DB bahwa data mungkin tidak dapat dibaca lagi oleh Magento, Anda perlu membuat file Pengaturan pemutakhiran data. Selain itu, mungkin modul pihak ke-3 yang perlu diperbarui ke versi yang kompatibel.
Jika Anda membuat serial pada data unserialize di mana saja dalam kode Anda, Anda mungkin harus mengubahnya juga.
Saya harap ini memberi Anda wawasan yang lebih baik tentang apa yang menyebabkan kesalahan ini.
Bersulang!
sumber
generation
folder. ;)Saya berakhir pada situasi yang sama persis. Setelah menambahkan kode di atas saya mendapat "Karakter UTF-8 cacat, mungkin disandikan salah"
Saya kira Anda tidak menggunakan bahasa default. Cobalah untuk mengubah bahasa menjadi "default" en_US.
Meetanshi - Bahasa apa yang Anda gunakan di front-end dan apakah pembuatan konten statis juga gagal?
sumber
Bagi saya solusinya adalah mengganti semua karakter khusus seperti "ä" dalam file terjemahan csv dengan versi html dengan karakter yang sama seperti ini:
Lalu aku membersihkan cache dan mengisi ulang frontend.
sumber