首页 文章

如何在CodeIgniter中为is_unique表单验证启用查询构建器?

提问于
浏览
3

我有一个关于在CodeIgniter中启用 is_unique() 规则进行表单验证的问题 .

在另一个解释(link)中,它们不包括 is_unique() 的标准用法的模型查询构建器

我需要为我的 id 字段使用规则 is_unique(table.field) .

如何使此功能在我的模型文件上工作以从我的数据库启动 table.field ,我该怎么办?因为在documentation,我没有看到启用 is_unique 规则的解释 .

我当前的代码仍然手动使用匹配数据,但我需要知道如何使用此规则

$ this-> form_validation-> set_rules('siteid','Site ID','trim | required | max_length [100] | is_unique [site_tower.site_id_tlp]');

1 回答

  • 0

    我刚刚浏览了您发布的链接,有两种方法可以使用此类验证 . 如果已在配置文件中设置 .

    有了它,您可以使用代码is_unique [TABLE_NAME.FIELD],它将自动运行 . 但有时这种逻辑可能不一定满足你的需要,你需要更复杂的东西 .

    例如,假设您有成员注册,要求您检查电子邮件是否已存在,您可以运行is_unique并且它将完美运行 . 现在假设您要编辑同一个成员,在编辑函数上运行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

相关问题