2013-10-15 1 views
0

Я использую Kohana 3.3 и хотел бы подтвердить ввод данных пользователя в моем контроллере, но он возвращает следующую ошибку:Kohana 3.3 Проверка при обновлении

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

Ошибка уже дает вам решение.

call_user_func_array() expects parameter 1 to be a valid callback, second array member is not a valid method

  • call_user_func_array() это функция, которая вызывает функцию пользователя (кто думал). Единственный раз, когда это происходит в вашем коде в правилах,

    array(array($this, 'unique'), array(':field', ':value')),

    Здесь вы хотите вызвать функцию пользователя через имя в качестве строки.

  • Теперь он говорит, что первый параметр, как ожидается, будет действительным обратным вызовом. Ключевое слово exptected сообщает вам, что в вашем коде это не так.
  • И для последней части недействительный метод - именно то, что вызывает проблему.

Ваш заголовок метода является

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 

 Смежные вопросы

  • Нет связанных вопросов^_^