Magento - 在控制器和块之间传递数据

2024-03-28

非常快速和简单的问题,但我找不到一个合适的答案 - 将数据从控制器传递到 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 行为,我会

  1. 创建一个继承自的简单模型类Varien_Object

  2. 在控制器中,使用以下方法实例化该对象Mage::getSingleton('foo/bar')

  3. 使用神奇的 getter/setter 在模型上设置值(您可以在继承自的对象中获取这些值)Varien_Object), or setData, etc.

  4. 在块中,使用以下命令再次实例化模型Mage::getSingleton('foo/bar')并读回值。

当你实例化一个模型时Mage::getSingleton(...)Magento 将实例化该对象作为单身人士。因此,如果您重新实例化一个对象(再次使用Mage::getSingleton('foo/bar'))你会得到同一个对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Magento - 在控制器和块之间传递数据 的相关文章

随机推荐