2013-01-23 43 views
3

我的表单中有一个价格字段,它将以十进制格式保存到db中。如何在验证/保存前更正用户输入?

现在如果用户输入逗号','不是'点'',我该如何静静地取代它,以便它会被正确保存?例如,而不是12,34,也将被保存12.34,不12.00

+1

你可以看看http://www.yiiframewo rk.com/doc/api/1.1/CHtml#activeNumberField-detail - CHtml#activeNumberField –

+0

很好的提示,虽然这次我的客户想让用户输入任何形式,并在需要时通过软件进行更正 – zuups

回答

8

它可能是最简单的,如果你使用的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') 
+0

谢谢,它工作当我把函数放入模型中并使用''filter'=> array($ this,'convertToFloat')'。我还没有找到在哪里放置convertToFloat函数,以便它可以在每个模型中工作。 – zuups

+0

@ zuups.com:你可以把它放在'index.php'里面。你没有听到我的消息,但它有效。 – Jon

+1

@ zuups.com您可以在父ActiveRecord类中编写'convertToFloat'函数,但最好编写一个单独的验证器类,如下所述:http://www.yiiframework.com/wiki/168/create-your-自己的验证规则/#HH1 – ajsharma