2012-05-28 74 views
2

我將定義表單驗證規則的邏輯分隔成一個庫。我想要在一個表單元素上應用多個回調函數。在codeigniter中的表單驗證中使用多個回調

$this->form_validation->set_rules('email', 'email', 'callback_db_check|callback_valid_email');   

現在我不知道該怎麼做。因爲它不工作,我的意思是多個回調不起作用。但是,如果我定義單個回調它的工作正常。

function db_check(){ 
    $this->CI->form_validation->set_message('db_check', 'Not found in db'); 
} 

function valid_email(){ 
    $this->CI->form_validation->set_message('db_check', 'Invalid email'); 
} 

這只是示例代碼。我擴展了表單驗證庫,以便我可以從庫中定義和調用驗證邏輯。任何建議我怎麼能做到這一點?

回答

3
$this->CI->form_validation->set_rules('email' , 'Email' , 'required|valid_email|max_length[255]|callback_email|callback_call_db'); 

p.s.您的回調應該總是返回true或false(您的例子犯規返回任何東西)

+0

確定是返回上各功能真的還是假的工作很好,謝謝不過了Syntex是liek這個我有$這個 - > CI-> form_validation-> set_rules(」 email','Email','required | valid_email | max_length [255] | callback_email | callback_call_db'); –

3

您可以在一個單一的元素

驗證規則可以使用格式

$this->form_validation->set_rules('email', 'email', 'callback_db_check|callback_valid_email');

設置應用多個回調函數

和回調函數必須返回true或false。

function db_check($user) 
    { 

     $sql=$this->db->query("select * from user where email like '%$user%' "); 
     if($sql->num_rows()>0) 
     { 
      return true; 
     } 
      else 
     { 

     $this->form_validation->set_message('db_check', 'Not found in db'); 
     return FALSE; 
     } 

    } 




function valid_email($user) 
     { 


      if(//condition) 
      { 
       return true; 
      } 
         else 
      { 

      $this->form_validation->set_message('valid_email', 'In valid email'); 
      return FALSE; 
      } 

     } 

在用戶側

<div class="field_main"> 
<div class="fi_title">E-Mail Address *:</div> 
<input type="text" id="email" name="email" value="<? echo set_value('email');?>" class="field_class" /> 
<? echo form_error('email','<div class="error">', '</div>');?> 
</div>