Если вы хотите, чтобы ваша функция проверки была доступна более чем в одном контроллере, вы должны включить правило в библиотеку MY_Form_validation.
Я делаю это в MY_Form_validation:
function exist($str, $value){
list($table, $column) = explode('.', $value, 2);
$query = $this->CI->db->query("SELECT COUNT(*) AS count FROM $table WHERE $column = $str'");
$row = $query->row();
return ($row->count > 0) ? FALSE : TRUE;
}
Затем в вашей модели (или контроллере), когда вы устанавливаете свои правила:
$this->form_validation->set_rules('username','username','exist[users.user_name]');
Правило вызывает существующую функцию.
Существующая функция анализирует строку users.user_name в точке и затем запрашивает базу данных, чтобы узнать, возвращена ли запись. Если это так, верните false, иначе true. Правило не будет выполнено при ложном возврате.