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 關注
- 178 瀏覽
添加回答
舉報
