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

Posted

技术标签:

【中文标题】如何在 CodeIgniter 中为 is_unique 表单验证启用查询生成器?【英文标题】:How to enable query builder for is_unique form validation in CodeIgniter? 【发布时间】:2016-03-22 08:33:51 【问题描述】:

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

【问题讨论】:

你有没有链接到你正在谈论的解释? here 看看这个***.com/questions/13692473/… @SandeepJPatel 我也需要查看模型函数,以及我如何填充数据库。您的链接说明是比较字段用户提交和数据库 before 规则。 请发布您当前的代码,以便我们查看您当前拥有的代码 【参考方案1】:

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

这样您就可以按原样使用代码 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 并搜索 callback 或 is_unique

【讨论】:

【参考方案2】:

你可能错过了这个?

$this->load->library('database');

在添加 database 库后立即工作。

【讨论】:

以上是关于如何在 CodeIgniter 中为 is_unique 表单验证启用查询生成器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CodeIgniter 3.x 中为来自客户端的每个请求验证 JWT 令牌

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

在 Codeigniter 中为卖家创建和添加自定义组

在codeigniter中为会话闪存数据提供css

为啥这个构造函数无法在 Codeigniter 中加载?

Codeigniter 中的路由