使用Codeigniter使用参数进行回调验证并使用数组设置规则?

时间:2012-05-15 13:32:23

标签: codeigniter callback validation

我想使用一个函数来验证带参数的日期......但我在配置数组中有所有验证。

config = array(
'page1/send'   => array(
    array(
            'field' => 'name',
            'label' => 'lang:name',
            'rules' => 'required'
         )
),    

'page2/send'   => array(
                            array(
                                    'field' => 'name',
                                    'label' => 'lang:name',
                                    'rules' => 'required'
                            ),
                             array(
                                    'field' => 'date1',
                                    'label' => 'lang:date',
                                    'rules' => 'required|'
                            )
                            array(
                                    'field' => 'date2',
                                    'label' => 'lang:date',
                                    'rules' => 'required|callback_date_compare'
                            )

                        ),

我想将另一个参数传递给“callback_date_compare”,在这种情况下是另一个字段(date1)。

如果没有在数组中设置规则我可以​​这样做,如果“$ date1”是帖子['date1']的值并且它完美地工作:

$this->form_validation->set_rules('date2', 'lang:date', 'required|callback_date_compare[' . $date1 . ']');

我需要在数组中执行它,因为我在其中有所有验证,并且我尝试在$ config数组中以相同的方式执行它但它不起作用,如:

                                  array(
                                        'field' => 'date2',
                                        'label' => 'lang:date',
                                        'rules' => 'required|callback_date_compare[date1]'
                                )

感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

在你的配置数组中

array(
        'field' => 'date2',
        'label' => 'lang:date',
        'rules' => 'required|callback_date_compare[date1]'
   )

在您的日期比较回调

function date_compare($value, $field_name)
{
    // Get the value in the field
    $field = $_POST[$field_name];

    if ($value != $this->input->post($field))
    {
          $this->form_validation->set_message('date_compare', 'Dates are different');
          return FALSE;
    }
    else
    {
         return TRUE;
    }

}

答案 1 :(得分:1)

由于您的配置是全局的,因此将函数设置为全局也是一个好主意。

MY_Form_validation.php中创建libraries/

<?php

class MY_Form_validation extends CI_Form_validation {

    function date_compare($str_start, $str_key) {

        $bool   =   ($str_start == $this->input->post($str_key));
        if ( ! $bool)
            $this->form_validation->set_message('date_compare', 'Dates are different');

        return $bool;

    }

}

然后设置规则date_compare[date1]

答案 2 :(得分:0)

创建一个名为date_compare的函数:

public function date_compare($date2)
{

if ($date2 != $this->input->post("date1"))
{
$this->form_validation->set_message('date_compare', 'Dates are different');
return FALSE;
}
else
{
return TRUE;
}

}

配置:

'page2/send'   => array(
                            array(
                                    'field' => 'name',
                                    'label' => 'lang:name',
                                    'rules' => 'required'
                            ),
                             array(
                                    'field' => 'date1',
                                    'label' => 'lang:date',
                                    'rules' => 'required|'
                            )
                            array(
                                    'field' => 'date2',
                                    'label' => 'lang:date',
                                    'rules' => 'required|callback_date_compare'
                            )

                        ),