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 的区别的主要内容,如果未能解决你的问题,请参考以下文章