非常快速和简单的问题,但我找不到一个合适的答案 - 将数据从控制器传递到 Magento 中的块的最佳方法是什么。
如果它有所不同,我将按如下方式加载布局:
$this->loadLayout(array('default', 'myModule_default'));
$this->_initLayoutMessages('customer/session')
->_initLayoutMessages('catalog/session')
->renderLayout();
我应该补充一点,我一直在使用注册表,如下所示:
在控制器中:
Mage::register('data', $data);
在块中:
$data = Mage::registry('data');
但不确定这是否是最好的方法。
你不知道。
在 Magento 的 MVC 方法中,控制器没有责任为视图设置变量(在 Magento 的情况下,视图是布局和块)。控制器在模型上设置值,然后块从这些相同的模型中读取值。在 Magento 的世界观中,让一个 Block 依赖于控制器来完成特定的事情是紧密耦合的,应该避免。
您的控制器的工作是对模型执行某些操作,然后告诉系统它的布局渲染时间。就是这样。布局/块的工作是根据系统模型的状态以某种方式显示 HTML 页面。
因此,如果我想模拟传统的 PHP MVC 行为,我会
创建一个继承自的简单模型类Varien_Object
在控制器中,使用以下方法实例化该对象Mage::getSingleton('foo/bar')
使用神奇的 getter/setter 在模型上设置值(您可以在继承自的对象中获取这些值)Varien_Object
), or setData
, etc.
在块中,使用以下命令再次实例化模型Mage::getSingleton('foo/bar')
并读回值。
当你实例化一个模型时Mage::getSingleton(...)
Magento 将实例化该对象作为单身人士。因此,如果您重新实例化一个对象(再次使用Mage::getSingleton('foo/bar')
)你会得到同一个对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)