gpt4 book ai didi

php - Magento - 在 Controller 和 block 之间传递数据

转载 作者:IT王子 更新时间:2023-10-28 23:59:10 25 4
gpt4 key购买 nike

这个问题非常快速和简单,但我找不到合适的答案 - 将数据从 Controller 传递到 Magento 中的 block 的最佳方式是什么。

以防万一,我按如下方式加载布局:

 $this->loadLayout(array('default', 'myModule_default'));

$this->_initLayoutMessages('customer/session')
->_initLayoutMessages('catalog/session')
->renderLayout();

我应该补充一点,我一直在按如下方式使用注册表:

在 Controller 中:

Mage::register('data', $data);

在 block 中:

$data = Mage::registry('data');

虽然不确定这是否是最好的方法。

最佳答案

你没有。

在 Magento 的 MVC 方法中, Controller 不负责为 View 设置变量(在 Magento 的情况下, View 是布局和 block )。 Controller 在模型上设置值,然后 block 从这些相同的模型中读取。在 Magento 的世界观中,让一个 Block 依赖于 Controller 做特定的事情是紧耦合的,应该避免。

Controller 的工作是对模型做某些事情,然后告诉系统它的布局渲染时间。而已。根据系统模型的状态以某种方式显示 HTML 页面是您的布局/ block 工作。

所以,如果我想模仿传统的 PHP MVC 行为,我会

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

  2. 在 Controller 中,使用 Mage::getSingleton('foo/bar')

  3. 实例化该对象
  4. 使用神奇的 getter/setter(在继承自 Varien_Object 的对象中获取这些值)或 setData 等在模型上设置值。

  5. 在 Blocks 中,使用 Mage::getSingleton('foo/bar') 再次实例化模型并读回值。

当您使用 Mage::getSingleton(...) 实例化模型时,Magento 会将对象实例化为作为单例。因此,如果您重新实例化一个对象(再次使用 Mage::getSingleton('foo/bar')),您将返回相同的对象。

关于php - Magento - 在 Controller 和 block 之间传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4006183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com