我正在开发一个处理货币值的CakePHP应用程序。客户希望数字具有像1.275,34
这样的自定义格式,即整数部分的分隔符为点,而小数部分的分隔符为逗号。验证和转换CakePHP中的十进制值
我想知道什么是管理这个最好的方法,因为我需要做两个基本点:
- 根据该自定义格式,写入形式验证值。
- 根据MySQL列数据类型(在这种情况下为
decimal(18,2)
,在上例中为1275.34
)预期的格式转换这些值。
我想我有这些选择,但我不完全满意,因为任何的几种模式与自定义格式工作,这意味着复制一些代码:
- 验证并在控制器变换值在致电
$this->Model->save()
之前,可能使用组件。 - 使用模型(
var $validate
数组)中的自定义规则验证数据并转换它们,也许使用行为。
你有什么建议?有没有其他方法来处理这个问题?
谢谢!
我喜欢这种方法,因为它避免了我自己编写转换代码。但同样的问题出现了:如何在验证时使用货币区域设置?哪里?我想通知用户,只要它以一种形式写入错误的值 – elitalon 2011-03-11 15:28:59
在这种情况下,我会在'beforeValidate'回调中而不是'beforeSave'中处理输入数据。我已经更新了我的答案。 – 2011-03-11 15:39:38
如果我想根据数据库的数据类型验证数据,那就没问题了。但我想根据自定义格式进行验证。我最终使用'beforeSave'方法来处理自定义数据,并使用'afterFind'方法来相应地显示它。下一步是使用行为重构,但您的答案指向了正确的路径。 – elitalon 2011-03-12 15:04:40