Magento 中 Mage::registry() 和 Session 的区别

Posted

技术标签:

【中文标题】Magento 中 Mage::registry() 和 Session 的区别【英文标题】:Difference between Mage::registry() and Session in Magento 【发布时间】:2014-12-09 11:29:42 【问题描述】:

我真的很困惑何时使用 Mage::registry() 和 Mage session

任何人都可以建议它们之间的差异以及何时使用。

【问题讨论】:

【参考方案1】:

Magento 注册表不会持久化,因为一旦您在新页面上,您将看不到仍然设置的那些注册表变量。我主要使用注册表来实现控制器和块之间的通信。

会话将持续存在,但要知道 Magento 中有多个会话命名空间,并且它们会在某些时候被清除,例如在下订单后清除 checkout/session。最好为会话创建自己的命名空间以避免任何冲突,例如重复变量或在错误的时间清除它。

一如既往,Alan Storm 有一些关于这个主题的好书:

http://alanstorm.com/magento_registry_singleton_tutorial

How to use Session in Magento

【讨论】:

【参考方案2】:

当您想在 SAME 页面请求中访问变量时使用 Mage::registry()(例如,将变量从控制器传递到模板)

当您想要跨不同页面请求访问变量时使用会话(例如,从一个页面导航到另一个页面)

【讨论】:

【参考方案3】:

Mage::registry() 意味着创建新的全局变量,可以在 Magento 存储中的任何位置访问这些变量。

作为一个静态函数,可以直接调用 Magento 注册表,而无需像动态函数那样实例化对象。

可以像 ClassName::StaticFunctionName() 一样调用 Magento 注册表。

而 Mage::getSingleton() 就像 php 中的会话。

我希望我能解释一下我的观点。

【讨论】:

以上是关于Magento 中 Mage::registry() 和 Session 的区别的主要内容,如果未能解决你的问题,请参考以下文章

Magento-if类别

magento导航获取父类别并具有常量父类别

按类别筛选

Magento:如何在magento中发送带有附件的联系表电子邮件?

Magento:在Magento模板中插入静态块

在Magento 1.9中安装Magento 2的扩展