【发布时间】:2015-12-21 11:49:48
【问题描述】:
在遵守 Magento 架构的同时,在 .phtml 模板中创建临时变量的最佳方法是什么?
示例
文件:/template/catalog/product/view.phtml
<?php
$myVar = $_product->getAttributeText('color');
if ( empty($myVar) ) {
// does not exist
} else {
// show the attribute
}
?>
除了这个表达式之外,其他任何地方都不需要 $myVar。
注意:我不是在寻找替代方法来编写此代码以避免创建变量。为便于讨论,假设需要创建一个临时变量。
$myVar 应该是什么?
- $myVar
- $namespaced_myVar
- $_myVar
- Magento 的注册表模式http://alanstorm.com/magento_registry_singleton_tutorial
- 别的东西...
寻找“真实世界”的解决方案,而不是纯粹的答案。你会怎么写?
回答
结合 Ben 的回答和 Alan/Vinai 的谈话中的这一点 https://twitter.com/VinaiKopp/status/225318270591442945 — 这就是我要写它的方式:
如果需要的不仅仅是基本逻辑,我将使用新方法扩展该类。
否则,我将在本地范围内创建新的变量,如下所示:
$mynamespace_myVar = 'xyz';
这就是我喜欢它的地方:
-
$mynamespace_提醒我这是我创建的,而不是 Magento - 这也使得 非常其他开发人员不太可能覆盖我的变量
这是我不喜欢的:
- 它不纯且可能会损坏,但我可能只需要整个站点
- 不使用
$_显示 var 是该模板的本地变量不是“Magento 方式”,但它使代码更具可读性。
所以我的模板大多会有这样的代码:
$gravdept_someNiceData = true;
【问题讨论】: