0

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

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" 是 post['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]'
                                )

任何帮助表示赞赏。

4

3 回答 3

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

}
于 2012-05-15T14:03:18.043 回答
1

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

创建MY_Form_validation.phplibraries/

<?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]

于 2012-05-15T14:15:53.503 回答
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'
                            )

                        ),
于 2012-05-15T13:41:07.440 回答