0

我一直在 Kohana 3 上收到此错误消息

ErrorException [ 警告 ]: call_user_func() 期望参数 1 是有效的回调,未找到函数 'pages_save' 或无效的函数名

在我的控制器中,我有以下代码:

 public function action_pages(){
    return call_user_func('pages_'.$this->request->param('id'));
}
function pages_save(){
    $this->auto_render = false;
}

如果我要访问 admin/pages/save 我应该被重定向到 pages_save() 函数对吗?但不知何故我不能?Kohana 不断向我抛出上述异常。我应该怎么做。在我看来,优化是一回事,如果我做 switch-case / if-else 块,如果我需要做的太多的话,我会永远花时间......

4

2 回答 2

2

首先,您应该相信错误消息。这意味着你犯了一个错误。稍微清理一下你的代码:

public function action_pages()
{
    $method = sprintf('pages_%s', $this->request->param('id'));
    return call_user_func($method);
}

public function pages_save()
{
    $this->auto_render = false;
}

这里的变化很小:将缺少的可见性说明符添加到pages_save并将方法名放入名为$method.

现在它变得越来越明显,您在这里使用了一个未定义的公共函数名称,而不是您想要调用的类方法$this。所以让我们解决这个问题:

public function action_pages()
{
    $method = sprintf('pages_%s', $this->request->param('id'));
    return $this->$method();
}

这应该可以解决您的问题。

于 2012-06-06T12:57:42.200 回答
0

不是 Kohana,是 PHP 引发了错误。要call_user_func()在类中使用,您需要使用以下语法:

call_user_func(array($this, 'pages_'.$this->request->param('id')));
于 2012-06-06T12:46:43.287 回答