class MyClass {
public $myMember = ['key1' => 'val1', 'key2' => 'key2'];
}
$smarty = new Smarty();
$smarty->assign('object', new MyClass());
$smarty->assign('member', 'myMember');
$smarty->assign('key', 'key1');
如何在不引入新变量的情况下访问Smarty模板中的$object->$member.$key
?
直向前{$object->$member.$key}
会导致错误(我猜.
的优先级高于->
?)
我想要一些不涉及引入新变量的东西,因此不是明显的{$temp=$object->$member}{$temp.$key}
答案 0 :(得分:1)
我担心没有标准方法可以做到这一点。
使用时:
{$object->$member|var_dump}
Smarty知道它是一个数组并显示它的值,但我不知道任何访问该数组元素的方法。
但是,您可以做的是创建Smarty modifier:
// modifier.get.php
function smarty_modifier_get($array, $index)
{
return $array[$index];
}
注册你的插件目录:
$smarty->addPluginsDir('myplugins');
然后你可以使用语法:
{$object->$member|get:$key}
当然,如果您需要,可以经常使用它来改变更短的东西。
但我还应该回答其他一些事情。我从未使用过这样的赋值来将对象的属性用作变量或键作为变量。
在这种情况下,您也可以简单地分配给Smarty数组:
$obj = new MyClass();
$smarty->assign('array',$obj->myMember);
然后在Smarty中你可以操作标准数组而无需复杂的语法或修饰符。所以也许你应该考虑它,但当然它取决于你。