Kohana 3.x call_user_func()错误

时间:2012-06-06 11:41:35

标签: php callback

我继续在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继续向我抛出以上所述的以下例外情况。我该怎么做呢优化是我心中的一件事,如果我做切换案例/ if-else块,如果有太多我需要做的话,它将永远带我...

2 个答案:

答案 0 :(得分: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添加了缺少的可见性说明符,并将methodname放入名为$method的变量中。

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

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

这可以解决您的问题。

答案 1 :(得分:0)

这不是Kohana,它是PHP抛出错误。要在类中使用call_user_func(),您需要使用以下语法:

call_user_func(array($this, 'pages_'.$this->request->param('id')));