2011-06-14 79 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