2016-04-29 72 views
2

我想通過在笨表單驗證規則多個回調傳遞多個回調....但只有回調工作在代碼點火器表單驗證規則

我用這句法中位指示我的一個

$this->form_validation->set_rules(   
       array(
        'field' => 'field_name', 
        'label' => 'Field Name', 
        'rules' => 'callback_fieldcallback_1|callback_fieldcallback_2[param]', 
        'errors' => array(
         'fieldcallback_1' => 'Error message for rule 1.', 
         'fieldcallback_2' => 'Error message for rule 2.', 
         ) 
        ), 
       ); 

和回調函數是....

function fieldcallback_1(){ 
     if(condition == TRUE){ 
       return TRUE; 
     } else { 
       return FALSE; 
     } 

} 

function fieldcallback_2 ($param){ 
     if(condition == TRUE){ 
       return TRUE; 
     } else { 
       return FALSE; 
     } 

} 

有人請幫我解決這個問題....任何其他的解決方案就經過多次回調在表格驗證規則也讚賞...

+0

爲什麼不叫另一個回調函數內部驗證的功能呢? –

回答

1

所有驗證例程必須至少有一個參數,它是要驗證字段的值。所以,沒有額外參數的回調應該像這樣定義。

function fieldcallback_1($str){ 
     return ($str === "someValue"); 
} 

需要兩個參數的回調定義這樣

function fieldcallback_2 ($str, $param){ 
    //are they the same value? 
    if($str === $param){ 
     return TRUE; 
    } else { 
     $this->form_validation->set_message('fieldcallback_2', 'Error message for rule 2.'); 
     //Note: `set_message()` rule name (first argument) should not include the prefix "callback_" 
     return FALSE; 
} 
+0

不,$ str和$ param不是相同的值。我比較$ str> $ param。 – besrabasant

+0

我只用平等作爲例子。替換您選擇的條件。 – DFriend

0

也許這樣?

 $this->form_validation->set_rules(   
      array(
       'field' => 'field_name', 
       'label' => 'Field Name', 
       'rules' => 'callback_fieldcallback_1[param]'), 
    ); 

    // Functions for rules 
    function fieldcallback_1 ($param){ 
     if(condition == TRUE){ 
       return fieldcallback_2($param); 
     } else { 
       $this->form_validation->set_message('callback_fieldcallback_1', 'Error message for rule 1.'); 

       return FALSE; 
     } 

} 

function fieldcallback_2 ($param){ 
     if(condition == TRUE){ 
       return TRUE; 
     } else { 
       $this->form_validation->set_message('callback_fieldcallback_1', 'Error message for rule 2.'); 
       return FALSE; 
     } 

}