2011-06-14 69 views
0

我正在使用规则中的回调验证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

你为什么认为它应该是私人的? – 2011-06-14 12:59:02

+0

在控制器中的CI和许多其他框架中,可以从URI访问非专用函数作为方法。至少有一个原因。 'site.com/controller/email_exists' *会导致不必要的副作用。 – Ross 2011-06-14 13:01:00

+0

@Tomalak Geret'kal,@罗斯所说的。 – Roman 2011-06-14 13:02:37

回答

0

如果您需要在对象的外部调用它(无论是回调或直接),它应该是公共

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

+1

更改函数名称会给你什么? – 2011-06-14 12:59:26

0

您要验证的电子邮件,你的模型account_model的基础上,所以这使得更多的集中到功能私人边界。你不会做任何重大的事情,通过公开这个功能,而不是你可以使这个功能是什么

A PRIVATE FUNCTION TO CHECK EMAILS FOR MODEL account_model 
相关问题