【问题标题】:Custom validation rule on html array causes set_value return nullhtml 数组上的自定义验证规则导致 set_value 返回 null
【发布时间】:2017-02-15 20:07:30
【问题描述】:

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

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' );

并尝试将值设置回来,当它在这样的表单上出现错误时,但始终返回 NULL,尽管设置了 $_POST。

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 的事实。该错误与这些变量无关。

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

【问题讨论】:

    标签: php codeigniter codeigniter-3


    【解决方案1】:

    您的代码掉到了底部。您需要返回经过验证的值...

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-27
      • 2017-07-25
      • 1970-01-01
      • 2018-10-25
      • 2018-04-24
      • 2017-04-11
      • 2018-02-18
      • 1970-01-01
      相关资源
      最近更新 更多