gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 20:53:22 25 4
gpt4 key购买 nike

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

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

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

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

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

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

谢谢!

最佳答案

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

至于 Hook ,如果您想在模型中进行转换,可以使用 beforeSave()afterFind() 回调来进行转换。

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

我建议您保留一个额外的字段,该字段在使用上面的回调进行查找操作后填充到模型模型中,这样您就可以始终使用它,并且如果您不小心尝试保存它也不会搞砸。

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

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

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

一个例子是

var $virtualFields = array(
'formatted' => 'FORMAT(12332.1,2)' // would output 12,332.10
);

关于php - 在 CakePHP 中验证和转换十进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5270284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com