2014-07-23 33 views
1
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

是否存在'{{$ object - > $ member}。$ key}'工作? – Laurence

+0

不,Smarty在'.'上給出語法錯誤 –

回答

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的你可以操作的標準陣列,無需複雜的語法或改性劑。所以也許你應該考慮它,但當然這取決於你。