如何在验证/保存之前纠正用户输入?

zuu*_*ups 3 yii

我的表单中有一个价格字段,将以十进制格式保存到db中.

现在,如果用户输入逗号' , '而不是点' .',我怎样才能安静地更换它以便正确保存?例如,而不是12,34,将保存12.34,而不是12.00

Jon*_*Jon 8

如果您CFilterValidator在验证发生时使用a 将字符串的输入自动转换为浮点值,则可能是最简单的; 其余的应该照顾好自己.

所以你的模型会有

public function rules() {
    return array(
        array('price', 'filter', 'filter' => 'convertToFloat'),
    );
}
Run Code Online (Sandbox Code Playgroud)

过滤功能就像是

function convertToFloat($value) {
    return floatval(trim(str_replace(',', '.', $value)));
}
Run Code Online (Sandbox Code Playgroud)

您还可以将过滤函数指定为任何有效的可调用函数,例如,将其设置为模型方法并将其指定为

'filter' => array($this, 'convertToFloat')
Run Code Online (Sandbox Code Playgroud)