我通过在规则中使用回调来验证CodeIgniter中表单验证中的数据库中的电子邮件。例如
$this -> form_validation -> set_rules( 'email', 'Email address', 'trim|valid_email|callback_email_exists' );
email_exists功能是:
public function email_exists($email)
{
$this -> load -> model('account_model');
$exists = $this -> account_model -> email_registered( $email );
if ( $exists == true )
{
$this -> form_validation -> set_message ( 'email_exists', 'Email already exists.');
return false;
}
return true;
}
工作正常。但是,上述email_exists
函数不应该是私有函数而不是公共函数吗?
我尝试将其设为私有private function _email_exists($email)
,然后通过callback__email_exists
然而我收到错误:
Fatal error: Call to private method Account::_email_exists() from context 'CI_Form_validation' in ....(line number)
有人可以告诉我出了什么问题吗?
答案 0 :(得分:0)
如果您需要从对象外部(无论是回调还是直接)调用它,它应该是公共的
答案 1 :(得分:0)
你可以这样做:
$rules['field'] = 'callback__email_exists';
$this->validation->set_rules($rules);
function _email_exists() {
// Normal callback function rules
}
确保将两个下划线附加到回调而不是一个。
不要忘记将下划线添加到邮件规则中:
$this->validation->set_message('_email_exists', 'The email already exists');
答案 2 :(得分:0)
您正在根据模型account_model
验证电子邮件,因此这会使功能更加集中于私有边界。通过将此函数公开,您将无法实现任何重要的事情,而是可以使此函数成为现实
A PRIVATE FUNCTION TO CHECK EMAILS FOR MODEL account_model