1 回答
TA贡献1839条经验 获得超15个赞
经过几个月的遗忘(我通过其他方式解决了这个失败的验证),我再次尝试并破解了它!
似乎在最新版本的 CI3 中,有一个错误会阻止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;
}
总是会返回false(因此,使表单验证失败),因为isset($this->CI->db)总是返回一个 boolean FALSE,无论所有与数据库相关的东西都被自动加载并且查询生成器处于活动状态。
修复很简单。函数本身只有一行代码:
public function is_unique($str, $field)
{
sscanf($field, '%[^.].%[^.]', $table, $field);
// add the following line
$this->CI->load->database();
return isset($this->CI->db)
? ($this->CI->db->limit(1)->get_where($table, array($field => $str))->num_rows() === 0)
: FALSE;
}
添加该单行后,表单验证再次开始正常工作。如果$this->CI->load->database()失败,它仍然会失败,考虑到is_unique规则(以及我自己的自定义规则)取决于能够运行查询,这是可以预料的。但只要数据库连接可用,规则就有效!
- 1 回答
- 0 关注
- 137 浏览
添加回答
举报