【问题标题】:Magento: When to pass variables to a block and when not to?Magento:何时将变量传递给块,何时不传递?
【发布时间】:2011-04-23 11:31:03
【问题描述】:

我最近发现了在 _toHtml() 方法中使用 assign 方法将变量设置为块的强大功能。我的问题是,什么时候这样做好,什么时候不这样做?我正在创建一个新模块,在我看来,将所有变量分配给块并在视图文件中引用这些变量而不是设置类似这样的东西是非常好的

<?php
  $var1 = $this->getVar1();
  $var2 = $this->getVar2();
?>

<div id="<?php echo $var1 ?>"><?php echo $var2 ?></div>

在块类中设置这些并调用phtml文件中的变量不是更好吗?然后你的模板文件看起来就像

<div id="<?php echo $var1 ?>"><?php echo $var2 ?></div>

这将删除模板中的更多 php 代码,我认为这很好吗?

我唯一能想到的是,当其他开发人员在处理模板文件时,将更难知道设置了哪些变量。如果我在顶部添加注释,所有变量大多设置在 x 块类中,这将有所帮助,或者如果他们正在调试,他们将看到所有变量设置,但我想它仍然可能令人困惑,我假设这就是 Magento 的原因只是很少这样做。

但我正在寻找其他人对此的意见以获得最佳实践。

【问题讨论】:

    标签: php zend-framework magento


    【解决方案1】:

    Magento 中的“正确”方式实际上可能更接近于这个:

    <div id="<?php echo $this->getVar1(); ?>"><?php echo $this->getVar2(); ?></div>
    

    减少代码可能是一件好事,但前提是您了解权衡取舍。为了节省两行(如果您使用上述技术,则不保存行),您实际上失去了一些灵活性。

    Magento 如此依赖魔术get*set* 方法的原因是它们可以在类中以透明的方式被覆盖。

    假设,为了争论,在路上有人覆盖了你的班级,并决定应该即时计算var1,而不是静态设置(这可能不会经常发生在你身上,但 Varien 需要接受这个考虑到核心课程)。如果您手动设置变量并按原样使用它们,则可能需要您更改代码中的多个引用。但是,通过使用魔术get* 方法,属性的计算要简单得多:

    public function getVar1() {
        $value = $this->_getData('var1');
        // perform calculations here
        return $value;
    }
    

    此公式甚至不会阻止 set* 等效的调用,也不需要对依赖此方法的代码进行任何更新。因此,请尽可能使用魔法方法,因为它们更符合框架的习惯,并且可以让您和其他人在处理代码添加时获得最大可能的灵活性。

    希望有帮助!

    谢谢, 乔

    【讨论】:

    • 如果我错了,请纠正我,我们在谈论同一件事吗?我了解魔术方法的工作原理,我没有在我的示例中使用魔术方法,也许我应该稍微更改一下代码。我说的是在块类中做一些逻辑并使用assign方法将其分配给_toHtml方法?你是说我用魔法设置比较好?
    • 对不起,我一定误解了你的问题。除此之外,我想我会说,对于我能想到的任何情况,使用魔法方法都比分配更好,而且更一致。我欢迎任何人对分配会更好的情况提出想法?
    猜你喜欢
    • 1970-01-01
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    相关资源
    最近更新 更多