0

我正在尝试使用 smarty 扩展 Lithium PHP,除了我的 smarty 插件允许访问锂助手之外,一切正常。

我的 smarty 功能旨在成为锂帮手的“总括”。我正在努力的部分是动态地将助手参数添加到我的回调中。

简化代码

$params = array('Google', 'http://www.google.com');

$helper = function($args){  
    return $this->html->link($args);
};

return call_user_func_array($helper, $params);

这导致<a href="/Google">Google</a>

一些进一步的测试表明,上面只将 $params 数组中的第一项传递给回调......奇怪。所以我将它包装在自己的数组中。拿那个,我无法解释的事情!

return call_user_func_array($helper, array($params));

这会产生一个锂错误,我不会进入,但是看起来助手正在传递一个数组,而不是从数组中翻译的参数作为单独的参数。

错误片段 “未找到 URL 的参数匹配项( 0 => 'Google', 1 => 'http://www.google.com', 'controller' => 'pages', 'action' => 'index')

所以我认为我错过了 call_user_func_array 方法。

我不认为这是实现我的目标的唯一解决方案,如果您能想到一种更好的方法来随时动态地传递函数任意数量的参数,我会很高兴。

请注意:$this-> html->link是解释我的问题的一种简化方法,该对象的htmllink部分实际上会动态变化,因此需要完全动态的函数参数。

4

2 回答 2

2

$helper只用一个参数声明,并且只有一个被转移到$this->html->link.

为什么不call_user_func_array(array($this->html, 'link'), array($params));直接使用?

于 2012-04-17T19:02:30.370 回答
0

你为什么不做

return $helper($params);

call_user_func_array()在我看来没有必要。
或者请澄清你为什么想要这个,因为对我来说这有效。

于 2012-04-17T19:05:23.417 回答