我的表单中有一个价格字段,它将以十进制格式保存到db中。如何在验证/保存前更正用户输入?
现在如果用户输入逗号','不是'点'。',我该如何静静地取代它,以便它会被正确保存?例如,而不是12,34
,也将被保存12.34
,不12.00
我的表单中有一个价格字段,它将以十进制格式保存到db中。如何在验证/保存前更正用户输入?
现在如果用户输入逗号','不是'点'。',我该如何静静地取代它,以便它会被正确保存?例如,而不是12,34
,也将被保存12.34
,不12.00
它可能是最简单的,如果你使用的CFilterValidator
的输入从字符串时自动验证发生在一个浮动值转换;其余的应该照顾自己。
所以,你的模型将有
public function rules() {
return array(
array('price', 'filter', 'filter' => 'convertToFloat'),
);
}
和过滤功能会像
function convertToFloat($value) {
return floatval(trim(str_replace(',', '.', $value)));
}
您还可以指定过滤功能的任何有效callable,例如使它成为一个模型的方法并将其指定为
'filter' => array($this, 'convertToFloat')
谢谢,它工作当我把函数放入模型中并使用''filter'=> array($ this,'convertToFloat')'。我还没有找到在哪里放置convertToFloat函数,以便它可以在每个模型中工作。 – zuups
@ zuups.com:你可以把它放在'index.php'里面。你没有听到我的消息,但它有效。 – Jon
@ zuups.com您可以在父ActiveRecord类中编写'convertToFloat'函数,但最好编写一个单独的验证器类,如下所述:http://www.yiiframework.com/wiki/168/create-your-自己的验证规则/#HH1 – ajsharma
你可以看看http://www.yiiframewo rk.com/doc/api/1.1/CHtml#activeNumberField-detail - CHtml#activeNumberField –
很好的提示,虽然这次我的客户想让用户输入任何形式,并在需要时通过软件进行更正 – zuups