首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CakePHP中验证和转换十进制值

问在CakePHP中验证和转换十进制值
EN

Stack Overflow用户
提问于 2011-03-11 07:46:16
回答 2查看 4.6K关注 0票数 5

我正在用CakePHP开发一个处理货币价值的应用程序。客户端希望数字具有像1.275,34这样的自定义格式,即在整数部分中以点作为分隔符,以逗号作为十进制部分的分隔符。

我想知道处理这个问题的最佳方法是什么,因为我需要做两件基本的事情:

  1. 根据该自定义的
  2. 验证用表单编写的值--这些值根据MySQL的列数据类型所期望的格式(在本例中为decimal(18,2),在上面示例中为1275.34 )。

我认为我有这些选项,但我对任何选项都不完全满意,因为有几个模型使用这种自定义格式,这意味着复制一些代码:

在调用Component.

  • Validate之前,
  • 可以在调用$this->Model->save()之前验证和转换控制器中的值,也可以使用模型中的自定义规则(var $validate数组)对数据进行验证和转换,或者使用行为进行转换。

你有什么建议吗?还有其他办法来处理这件事吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-11 15:19:03

"1.234,56“格式是欧洲货币格式,所以你最好让整个应用程序使用这种格式。您需要做的是使用setlocale(LC_MONETARY,$locale)设置应用程序的货币区域设置。因此,例如:

代码语言:javascript
复制
setlocale(LC_MONETARY, 'it_IT');

然后,使用money_format对货币字符串进行适当的格式化,并使用Model::beforeValidate()回调在验证之前对任何货币输入进行按摩,这样就可以根据标准的十进制格式进行验证。This related question may be useful.

票数 1
EN

Stack Overflow用户

发布于 2011-03-11 07:59:20

您可以使用PHPs number_format()以任意方式格式化它:http://php.net/manual/en/function.number-format.php

至于挂钩,您可以使用beforeSave()和afterFind()回调来执行转换,如果您想在模型中这样做的话。

http://book.cakephp.org/view/1048/Callback-Methods

我建议您在使用上面的回调进行查找操作之后,在模型模型中保留一个额外的字段,这样您就可以随时使用它,并且如果您不小心试图保存它,就不会出错。

还可以使用virtualFields (可从cakePHP 1.3中获得)来创建一个字段,该字段在每次查找时都由DB填充。您可以使用MySQL的字符串格式来实现这一点。

虚拟场:http://book.cakephp.org/view/1608/Virtual-fields

MySQL字符串:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_format

一个例子就是

代码语言:javascript
复制
var $virtualFields = array(
    'formatted' => 'FORMAT(12332.1,2)' // would output 12,332.10
);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5270284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档