2014-07-23 2 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'); 

Как я могу получить доступ к $object->$member.$key в моем шаблоне Smarty без введения новой переменной?Доступ к массиву является переменной-членом

Прямо вперед {$object->$member.$key} приводит к ошибке (я предполагаю, что . имеет более высокий приоритет, чем ->?)

Я хотел бы что-то, что не предполагает введение новой переменной, следовательно, не очевидный {$temp=$object->$member}{$temp.$key}

+0

does '{{$ object -> $ member}. $ Key}' work? – Laurence

+0

Нет, Smarty дает синтаксическую ошибку на '.' –

ответ

1

I Боюсь, что нет стандартного метода для этого.

При использовании:

{$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 вы могли бы манипулировать стандартный массив без сложного синтаксиса или модификаторов. Так что, возможно, вам стоит подумать об этом, но, конечно, это зависит от вас.

Смежные вопросы