Codeigniter 表单验证无法与自定义回调函数一样工作

Posted

技术标签:

【中文标题】Codeigniter 表单验证无法与自定义回调函数一样工作【英文标题】:Codeigniter form validation not work as espected with custom callback function 【发布时间】:2016-12-21 08:23:58 【问题描述】:

我使用 Codeigniter 的内置表单验证库来验证电子邮件输入字段。

这是我的验证规则:

$this->form_validation->set_rules('email', '<b>email</b>', 'trim|htmlspecialchars|required|valid_email');

当使用上述验证规则时,一切都按照我预期的方式工作。

例如:

如果输入字段为空,则显示:需要电子邮件。 如果用户输入的不是有效的电子邮件,则显示:电子邮件无效。

然后我通过添加回调函数来添加自定义表单验证规则。

这是我修改后的验证规则:

$this->form_validation->set_rules('email', '<b>email</b>', 'trim|htmlspecialchars|required|valid_email|callback_mail_check');

还有,这是我的回调函数:

public function mail_check() 

        if (!$this->users_model->get_user_by_email_address($this->input->post('email', TRUE))) 

            $this->form_validation->set_message('mail_check', 'Your <b>email</b> could not be found.');
            return FALSE;

         else 
            return TRUE;
        

    

现在,当我在不填写电子邮件字段的情况下提交表单或使用无效电子邮件提交时,它总是输出自定义回调函数的验证消息(找不到您的电子邮件。)。

但这不是我想要的方式。

我想首先验证电子邮件字段的空值,然后验证有效的电子邮件,在回调函数之后。

【问题讨论】:

【参考方案1】:

您使用的验证规则是正确的。只需删除一些不需要的规则

$this->form_validation->set_rules('email', '<b>email</b>', 'required|valid_email|callback_mail_check');

回调自动添加当前验证的参数。您不需要从 GET/POST 方法中读取它。

public function mail_check($email)

    if (!$this->users_model->get_user_by_email_address($email)) 

        $this->form_validation->set_message(__FUNCTION__, 'Your <b>email</b> could not be found.');
        return false;
    
    return true;

【讨论】:

以上是关于Codeigniter 表单验证无法与自定义回调函数一样工作的主要内容,如果未能解决你的问题,请参考以下文章

在 Codeigniter 中,如何将第三个参数传递给回调(表单验证)?

CodeIgniter 在带有 ajax 回调的表单字段旁边单独显示错误

CodeIgniter 2.0 - 验证数组

如何将 Django 的内置身份验证与自定义表单(html 模板)一起使用

AWS API Gateway 身份验证(Cognito 与自定义授权者)

CodeIgniter 表单验证,无法获取验证错误