2012-06-06 40 views
0

我保持在具有上Kohana的此錯誤消息3Kohana的3.X call_user_func()錯誤

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; 
} 

如果我將訪問管理/網頁/保存我應該被重定向到pages_ save()函數是否正確?但不知何故,我不能? Kohana不斷拋出上述以下例外。我應該如何去與此。優化是我腦海中的一件事,如果我做switch-case/if-else塊,如果有太多我需要做的事情,它會帶我永遠...

回答

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(); 
} 

這應該可以解決您的問題。

+0

哇謝謝...真的... :)它工作 –

0

這不是Kohana,它是PHP投擲錯誤。要使用call_user_func()從一個類中,您需要使用以下語法:

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