моя проблема заключается в следующем: я пишу библиотеку входа. Эта библиотека имеет функцию _validation (), и для проверки данных используется библиотека проверки. С использованием обычных методов проверки он работает отлично, но использование функции обратного вызова просто не работает. Он не называется.
Я называю это так.
$this->CI->form_validation->set_rules('user', 'Username', 'required|callback__check_user');
Имя функции – _check_user, и оно использует имя пользователя _check_user ($ user). Сама функция отлично работает, и я могу также назвать ее в классе ($ this -> _ check_user ('username')) с рабочим результатом.
Я предполагаю, что может быть проблема, потому что я не работаю в контроллере, поэтому у меня есть экземпляр CI $ this-> CI, а не только оригинальный экземпляр $ this->
Кто-нибудь знает, как это исправить?
Заранее спасибо.
Эй, я понял, как это работает для меня. Просто расширяя библиотеку Form_validation в MY_Form_validation.php, вы можете создавать собственные методы проверки. Я думаю, что это чистый способ, и он отлично работает. Я создаю ниже метод проверки для проверки существующих имен пользователей и паролей. $ value – это что-то вроде table_name.fieldname. У меня нет сообщения, чтобы он использовал сообщения _exist из lang-файлов.
/** * Exist * * checks if the entry exists in the database * returns a boolean * * @access private * @param string * @param field * @return boolean */ function _exist($str, $value) { list($table, $column) = explode('.', $value, 2); $query = $this->CI->db->query("SELECT COUNT(*) AS count FROM $table WHERE $column = '$str'"); $row = $query->row(); return ($row->count > 0) ? TRUE : FALSE; }
Спасибо за вашу помощь.
Обратный вызов проверки формы будет срабатывать только по методу внутри текущего контроллера.
Просто сделайте это в контроллере, использующем обратный вызов:
function _check_user($user) { $this->load->model('login'); $result = $this->login->_check_user($user); return $result; }