CodeIgniter:如何在模型而不是控制器中放置自定义验证功能?

时间:2013-12-06 01:59:18

标签: php codeigniter

在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()”函数时它没有被调用。我该如何解决这个问题?

非常感谢提前!

1 个答案:

答案 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();