我有一个关于在CodeIgniter中启用is_unique()
规则进行表单验证的问题。
在另一个解释(link)中,他们没有为is_unique()
的标准用法包含模型查询构建器
我需要为is_unique(table.field)
字段使用规则id
。
如何使此功能在我的模型文件上工作以从我的数据库启动table.field
,该怎么办?因为在documentation,我没有看到启用is_unique
规则的解释。
我当前的代码仍然手动使用匹配数据,但我需要知道如何使用此规则
$ this-> form_validation-> set_rules(' siteid','网站ID',' trim | required | max_length [100] | is_unique [site_tower。 site_id_tlp]&#39);
答案 0 :(得分:0)
我刚刚浏览了您发布的链接,有2种使用这种验证的方法。如果已在配置文件中设置。
因此,您可以按原样使用is_unique [TABLE_NAME.FIELD]代码,它将自动运行。但是有时这种逻辑不一定能满足您的需求,您将需要更复杂的东西。
例如,假设您有一个成员注册,要求您检查电子邮件是否已存在,可以运行is_unique,它将正常运行。现在,假设您要编辑同一成员,如果未编辑任何数据,则在edit函数上运行is_unique将使用户无法保存数据。为什么?因为is_unique会确定该电子邮件已经注册,尽管它属于正在编辑的当前用户。
我们该如何解决?我们运行自己的回调,在其中指定逻辑。
您可以通过在控制器内指定一个方法(或模型-稍有不同)来做到这一点,但是要在方法名称前加上callback_以便检测到它。
$this->form_validation->set_rules('username', 'Username', 'callback_username_check');
然后它将在您的控制器中查找一个名为“ username_check”的方法
public function username_check($str)
{
if ($str == 'test')
{
$this->form_validation->set_message('username_check', 'The {field} field can not be the word "test"');
return FALSE;
}
else
{
return TRUE;
}
}
当然,您可以在回调中使用查询来检查数据库,而不是仅检查示例中显示的字符串。
更多信息可以在Ci3文档中找到。 LINK
使用CTRL + F并搜索回调或is_unique
答案 1 :(得分:0)
您可能错过了吗?
$this->load->library('database');
在添加数据库库后即可立即工作。