在CI的文档中,它表示您可以创建自己的自定义验证,以便在表单提交检查中使用。它显示了如何在控制器中完成此操作:
http://ellislab.com/codeigniter%20/user-guide/libraries/form_validation.html
但是如果我想在模型中使用我的自定义验证功能呢?
我发现以下内容无效......
以下两种功能均为模型:
public function validate_form(){
$this->form_validation->set_rules('username', 'Username', 'callback_illegal_username_check');
$this->form_validation->run();
}
这是我的自定义验证功能:
public function illegal_username_check($string){
if($string == 'fcuk'){
$this->form_validation->set_message('illegal_username_check', 'Looks like you are trying to use some swear words in the %s field');
return FALSE;
}
else{
return TRUE;
}
}
我发现因为我的自定义验证函数在模型中,所以当我运行“validate_form()”函数时它没有被调用。我该如何解决这个问题?
非常感谢提前!
答案 0 :(得分:0)
您应该将自定义验证规则放在application / libraries文件夹中的MY_Form_validation.php中。
然后,当你分配规则时,你可以做这样的事情......
$this->form_validation->set_rules('field1', 'Field one name', 'trim|required|xss_clean|your_custom_validator');
请注意,自定义验证程序不需要前面的回调_ 关键字。
以下是My_Form_valdation.php文件的示例。
class MY_Form_validation extends CI_Form_validation {
function __construct($rules = array()) {
parent::__construct($rules);
$this->ci = & get_instance();
$this->ci->load->database();
}
function your_custom_validator($val) {
$this->set_message('your_custom_validator', 'this isn\'t right!');
return (!$val) ? FALSE : TRUE;
}
注意在构造中我已经获得了Ci实例并加载了数据库类。
要使用它,我会做这样的事情......
$this->ci->db->where('id', 1)->get('user')->row();