使用Smarty 3.0,我想这样做,以避免代码重复:
{$assocArray = ['param1' => 'value1', 'param2' => 'value2', ...]}
{magicFunction name='someHelper' params=$assocArray}
而不是
{$assocArray = ['param1' => 'value1', 'param2' => 'value2', ...]}
{someHelper param1=$assocArray['value1'] param2=$assocArray['value2'] ...}
我找到{call}
但不完全是我正在寻找的。 p>
我会尝试自己做,但我愿意接受建议(甚至是复制/粘贴的代码片段:-p)
答案 0 :(得分:2)
您可以创建一个名为unroll_parameters
的包装函数,定义如下。
function unroll_params ($params, &$smarty) {
return call_user_func_array ($params['name'], $params['args']);
}
这将使您能够使用以下内容:
{unroll_params name='someFunction' args=$assocArray}
如果您想在被叫函数中访问$smarty
,请在调用$params['args']
之前将值附加到call_user_func_array
。
return call_user_func_array (
$params['name'], array_merge ($params['args'], array ($smarty))
);
注意:如果函数声明如下:function foo ($var1,$var2, ..., $smarty)