Serialization not allowed in Magento?

2019-06-22 08:09发布

When I turn on cache in Magento, I get the following exception:

Serialization of 'Mage_Core_Model_Layout_Element' is not allowed

Exception occurs in app/code/core/Mage/Page/Block/Template/Links.php, on line:

return parent::getCacheKeyInfo() + array(
            'links' => base64_encode(serialize($links)),
            'name' => $this->getNameInLayout()
        )

I am using Magento Enterprise 1.10 and PHP 5.3.

Can anyone tell me what the problem is?

4条回答
我想做一个坏孩纸
2楼-- · 2019-06-22 08:27

This problem happened to me when trying to serialize categories after calling the getCategoryUrl function after digging i found out that that set _urlModel object which cannot be serialized as it contains Mage_Core_Model_Layout_Element so before serializing the object check if it has that _urlModel property

enter image description here

查看更多
Deceive 欺骗
3楼-- · 2019-06-22 08:35

You shouldn't have an empty after_text or before_text tags in your layout file. If you don't need it, just delete the tag at all.

If it will not help, dump the $links variable before the 150th line in the app/code/core/Mage/Page/Block/Template/Links.php file, and you will see an array with arrays inside it. All of keys and values should be strings or integers, not objects. The key of array value which is an object will tell you which tag to delete from the layout file.

查看更多
走好不送
4楼-- · 2019-06-22 08:35

Awesome @vsushkov.

I used: try{ serialize($links); } catch(Exception $e){ Mage::log($links); die; } to find out exact layout where we had those empty tags and after removing those empty tags, it fixed the issue and then removed above code :-)

查看更多
Fickle 薄情
5楼-- · 2019-06-22 08:42

Saw this issue on a clients site. None of the solutions above worked for me. After much googling of the error, it seems to be related to JM or JoomlArt themes/extensions. The code is extremely poorly written. For example some of the things you will find in these themes include: Declaring php classes inside templates, Setting global variables inside templates, Setting data into superglobals from templates, Providing a translation file, yet not wrapping most text strings in template in the translate function

I found 1 response from their support staff essentially suggesting to turn off error reporting to fix the issue.

I found my problem in app/design/frontend/default/jm_adamite/template/catalog/navigation/tops.phtml There was a line setting $this into $_SESSION. I commented it out and the error went away. Nothing else appeared broken. A grep for that variable being used anywhere else had 0 results. If you have one of these JM extensions installed or use one of their themes, I would suspect that first Good luck

查看更多
登录 后发表回答