在Code Igniter表单验证规则中传递多个回调

时间:2016-04-29 13:15:24

标签: php forms codeigniter validation

我想在codeigniter表单验证规则中传递多个回调....但只有一个回调工作

我在我的控制器中使用了这种语法

$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;
      }

}

有人请帮我解决这个问题....任何其他有关在表单验证规则中传递多个回调的解决方案也不胜感激......

2 个答案:

答案 0 :(得分:2)

所有验证例程必须至少有一个参数,该参数是要验证的字段的值。因此,应该像这样定义一个没有额外参数的回调。

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;
}

答案 1 :(得分: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;
       }

 }