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

时间:2015-12-16 09:20:39

标签: php codeigniter validation query-builder codeigniter-3

我有一个关于在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);

2 个答案:

答案 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');

在添加数据库库后即可立即工作。