在模板中调用函数:使用assoc发送参数。数组而不是参数/值对

时间:2011-12-19 14:54:34

标签: php smarty

使用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)

1 个答案:

答案 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)