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

eli*_*lon 5 php validation cakephp decimal

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

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

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

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

  • 在调用之前验证并转换控制器中的值$this->Model->save(),可能使用组件。
  • 使用模型(var $validate数组)中的自定义规则验证数据并转换它们,可能使用行为。

你有什么建议吗?有没有其他方法来处理这个问题?

谢谢!

Dan*_*ght 1

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

setlocale(LC_MONETARY, 'it_IT');
Run Code Online (Sandbox Code Playgroud)

然后,您可以money_format适当地格式化货币字符串,并Model::beforeValidate()在验证之前使用回调来处理任何货币输入,以便您可以根据标准十进制格式进行验证。这个相关问题可能有用。