我的表中有一个名为 value 的字段,它是一个大小为11(MySQL)的INT字段。它存储货币值的数据,没有小数和千位分隔符。例:4.658,85将成为465885(巴西数字格式)。
我们假设我要保存值1,200.50:
我有一个带有jQuery掩码的输入字段,它将以1.200,50格式存储该值。
然后,为了保存它,我必须这样做:
// In the Controller
if ($this->request->is(['post'])) {
// This will convert 1.200,50 to 120050
$this->request->data['value'] = str_replace([',', '.'], '', $this->request->data['value']);
$this->Entity->patchEntity($entity, $this->request->getData());
if ($this->Entity->save($entity)) {
// Entity saved...
}
}
之后,为了显示在View中格式化的这个值,我必须这样做:
<!-- In a View -->
<p><?php echo number_format($data['value'] / 10, 2, ',', '.') ?></p>
编辑实体时,我还必须调用格式化函数,因为使用jQuery Mask输入:
// When editing. In the Controller
if ($this->request->is(['get'])) {
if (!empty($entity['value'])) {
$this->request->data['value'] = number_format($entity['value'] / 10, 2, ',', '.')
}
}
这适用于我的项目,但我认为在保存之前和显示此值之前有更好,更专业的方式进行此类转换,当我必须在项目中多次调用此字段时,这是很多工作。请有人帮助我吗?
答案 0 :(得分:0)
CakePHP有默认号码功能,请使用。
示例:
echo $this->Number->format('123456.7890', [
'places' => 2,
'before' => '¥ ',
'after' => ' !' ]);
// Output '¥ 123,456.79 !'
参考链接:https://book.cakephp.org/3.0/en/core-libraries/number.html#formatting-numbers
解决方案1:为concat名字创建常用函数&amp;使用实体的姓氏字段
示例代码:
用户实体文件:
class User extends Entity {
protected $_virtual = ['full_name'];
protected function _getFullName() {
return $this->_properties['first_name'] . ' ' . $this->_properties['last_name'];
}}
查看文件:
<td><?= $input->full_name ?></td>
解决方案2:我们也可以使用beforeMarshal函数
public function beforeMarshal($data,$options) {
foreach ($data as $key => $value) {
$data[$key] = number_format($value,2);
}}
我希望这会对你有所帮助。