html数组上的自定义验证规则导致set_value返回null

时间:2017-02-15 20:07:30

标签: php codeigniter codeigniter-3

我有这个自定义验证规则来验证大于零的金额。

public function greater_than_zero_money($value)
{
    $value = str_replace(',', '', $value);
    $value = str_replace('.', '', $value);

    if ( empty($value) || floatval($value) <= 0 ){

        $this->form_validation->set_message('greater_than_zero_money', 'The {field} field must be greater than zero.');

        return false;

    }
}

我以这种方式设置自定义验证规则

$this->form_validation->set_rules ( "vl_expense[$k]" , 'Expense Value' , 'callback_greater_than_zero_money' );

然后尝试将值设置回来,当它在这样的形式上出错时,但是在设置$ _POST时总是返回NULL。

set_value("vl_expense[{$e['cd_type_expense']}]")==NULL
$_POST["vl_expense"][$e['cd_type_expense']]==LAST VALUE FROM FORM

如果我更改了TRIM(或其他内置验证)的验证规则,我会得到值。

$this->form_validation->set_rules ( "vl_expense[$k]" , 'Expense Value' , 'trim' );

我也尝试混合trim和callback_greater_than_zero_money,但没有成功。

请忽略这里没有提到变量$ k和$ e的事实。该错误与这些变量无关。

另一个有趣的事实是,我有另一个自定义验证字段,但不是数组

1 个答案:

答案 0 :(得分:0)

你的代码辍学了。您需要返回验证值...

public function greater_than_zero_money($value)
{
    $value = str_replace(',', '', $value);
    $value = str_replace('.', '', $value);

    if ( empty($value) || floatval($value) <= 0 ){

        $this->form_validation->set_message('greater_than_zero_money', 'The {field} field must be greater than zero.');

        return false;

    }

    return $value;

}