2012-04-17 66 views
0

我试图用smarty扩展锂电PHP,除了我的smarty插件允许访问锂助手外,一切工作正常。正确使用call_user_func_array

我的聪明功能是为了成为锂助手的“猫”。我正在努力的部分是动态地将helpers参数添加到我的回调中。

简化的代码

$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部分该对象实际上会动态改变,因此对于完全动态的函数参数的要求。

回答

2

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

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

+0

这工作完美!我的英雄! – joseym 2012-04-17 19:27:11

0

为什么你不只是做

return $helper($params); 

无需call_user_func_array()在我看来。
或者请澄清你为什么要这样做,因为对我来说这是有效的。

+0

问题是$ this-> html-> link需要被传递,像这样$ this-> html-> link('Google','http://www.google.com'),而不是$ this-> html-> link(array('Google','http://www.google.com')),所以只需传入$ params就足够了。 – joseym 2012-04-17 19:25:17

+0

好吧,现在我明白了:)然后我的回答变得过时了。 – 2012-04-17 19:30:57

+0

无论如何,@ kirlloid的回答让我知道我需要去哪里 – joseym 2012-04-17 20:24:02