我在使用带有CodeIgniter 3.x的form_validation库时出现问题:
我想使用模型函数作为输入的验证规则。当我提交表单时,似乎根本没有调用该函数。 According to the user guide,这就是我从控制器那里做到的方式:
if($this->input->post() !== false)
{
$this->form_validation->set_rules(
'username', //the post value to check
'User Name',
array(
'trim',
'required',
array($this->user_model, 'checkUserName') // i want to call checkUserName from the user_model model
)
);
我不明白为什么它甚至不会调用user_model中的checkUserName函数:有没有人有想法?
[编辑] :我在system / libraries / form_validation.php中看到了set_rules()函数的源代码。似乎如果第三个参数不是字符串,它什么都不做,所以我不能调用模型函数。用户指南不是最新版本? 这是我从form_validation中找到的代码行:
// No fields? Nothing to do...
if ( ! is_string($field) OR ! is_string($rules) OR $field == '')
{
return $this;
}
答案 0 :(得分:0)
如果您要检查不重复的用户名,请使用内置函数is_unique['table.field]
表格:表格的名称
字段:是要检查的字段的名称。
$this->form_validation->set_rules('username', User Name, 'is_unique['users.username]');
这将检查dbtable用户的字段Username。如果提供的用户名是find,它将返回错误用户名不唯一。
这是在form_validation类中定义的is_unique()
函数:
public function is_unique($str, $field)
{
sscanf($field, '%[^.].%[^.]', $table, $field);
return isset($this->CI->db)
? ($this->CI->db->limit(1)->get_where($table, array($field => $str))->num_rows() === 0)
: FALSE;
}
如果您真的想要调用自己的自定义函数,那么...
最好是扩展form_validation类:如下。
class MY_Form_validation extends CI_Form_validation {
protected $CI;
public function __construct()
{
parent::__construct();
$this->CI =& get_instance();
}
public function check_user_name($str)
{
//here you codes goes eg.$this->CI->db->get_where(); etc.
}
}
答案 1 :(得分:0)
'premium_dates' => [
'field' => 'premium_dates',
'label' => 'Premium dates',
'rules' => [
'trim',
['validate_premium_dates', function () {
return $this->Properties_seasons_model->validate_premium_dates();
}],
],
'errors' => [
'validate_premium_dates' => 'Premium dates enabled. Please choose at least one Premium Date.',
],
];