CodeIgniter表单验证从配置规则回调模型?

时间:2018-02-01 08:04:59

标签: forms codeigniter validation codeigniter-3

我的User_model有一个名为is_unique_email($ email)的公共方法。此方法检查用户是否具有带有状态标志检查的uniqe邮件地址。这也是我无法使用CodeIgniter的标准is_unique验证规则的原因。

我正在为我的验证规则组使用带有配置数组的form_validation.php。我的问题是:如何调用模型方法来检查新用户的电子邮件地址?我搜索并尝试了很多东西,但没有任何效果。我首选的电话是|管道分离器。

赞:trim|required|max_length[70]|valid_email|<〜这里是模型回调〜>

这个回调是否有任何解决方案,或者没有办法,我必须扩展Form_validation系统库?

我正在使用CodeIgniter 3.1.7。

提前致谢!

1 个答案:

答案 0 :(得分:0)

<强>更新

因为我总是通过扩展form_validation库来做事我忘了这个:

https://codeigniter.com/user_guide/libraries/form_validation.html#callbacks-your-own-validation-methods

和这个(匿名函数):

https://codeigniter.com/user_guide/libraries/form_validation.html#callable-use-anything-as-a-rule

可能对你更好。如有疑问,请务必阅读文档;)

是的,您可以扩展application/library库。在MY_Form_validation.php中制作一个class MY_Form_validation extends CI_Form_validation { 并将其扩展为CI&#39; s

/**
 * Checks to see if bot sum is valid 
 * e.g. equals the session stored values
 * 
 * @param int $sum
 * @return boolean
 */
public function valid_bot_sum($sum) {
    $generated = $this->CI->session->bot_first_number + $this->CI->session->bot_second_number;
    if ($generated !== intval($sum)) {
        $this->set_message('valid_bot_sum', 'Invalid bot sum.');
        return false;
    } else {
        return true;
    }
}

然后你可以做这样的事情:

form_validation

现在可以通过管道分隔符访问您的函数作为任何本机$this->CI验证函数。请确保在我完成后将消息设置为false,否则您将收到错误消息。您可以像r那样访问CI实例。

在你的情况下,你可以将函数从模型迁移到这个文件中,或者你可以通过在函数中加载模型并调用函数来调用它,然后测试它是否计算为true / false并处理为上方。