我正在使用Kohana 3.3并想在我的Controller中验证用户输入,但它返回以下错误:
ErrorException [警告]:call_user_func_array()期望参数1是有效的回调,第二个数组成员不是有效的方法
这是我的控制器:
$this->template->user =Auth::instance()->get_user();
$courseModel = Model::factory('courses');
$object = Validation::factory($this->request->post());
// $object->bind(':model', $courseModel);
$object
->rule('code', 'not_empty')
->rule('code', 'Model_Courses::unique_code')
->rule('code', array('max_length', array(':value', 32)))
->rule('description', 'not_empty');
if($object->check()) { //this is where the error triggers
$user = ORM::factory('courses', $this->request->param('id'))
->values($_POST, array(
'code',
'description',
));
$query = DB::update('courses')
->set(array(
'code' => $_POST['code'],
'description' => $_POST['description'],
))
->where('id', '=', $this->request->param('id'));
$result = $query->execute();
// Reset values so form is not sticky
$_POST = array();
$courses = ORM::factory('courses')
->find_all();
$json = array();
foreach ($courses as $course) {
if($course->id != 1) $json[] = $course->as_array();
}
$data = json_encode($json);
// Display users table
$courseView = View::factory('courses/list');
$courseView->bind('content', $data);
$this->template->content = $courseView;
我的Model_Courses代码如下:
class Model_Courses extends ORM {
protected $_table_name = 'courses';
protected $_primary_key = 'id';
public function rules() {
return array(
'code' => array(
array('not_empty'),
array('max_length', array(':value', 32)),
array(array($this, 'unique'), array(':field', ':value')),
),
'description' => array(
array('not_empty'),
),
);
}
public static function unique_code($code)
{
return ! DB::select(array(DB::expr('COUNT(code)'), 'total'))
->from('courses')
->where('code', '=', $code)
->execute()
->get('total');
}
}
我错过了什么?我按照这里的文档:
http://kohanaframework.org/3.3/guide/kohana/security/validation
请帮忙!
答案 0 :(得分:0)
错误已经为您提供了解决方案。
call_user_func_array()期望参数1是有效的回调,第二个数组成员不是有效的方法
call_user_func_array()
是一个调用用户函数的函数(谁想到)。在代码中发生这种情况的唯一时间是在规则中,
array(array($this, 'unique'), array(':field', ':value')),
在这里,您希望通过名称作为字符串调用用户函数。
您的方法标题是
public static function unique_code($code)
因此名称不是unique
,而是unique_code
array(array($this, 'unique'), array(':field', ':value')), // fails
array(array($this, 'unique_code'), array(':field', ':value')), // should work