EasyAdmin Money Field
此字段用于表示存储金额的属性值。
在表单页面(编辑和新建)中,它看起来像这样

基本信息
- PHP 类:
EasyCorp
\Bundle \EasyAdminBundle \Field \MoneyField - Doctrine DBAL Type 用于存储此值:
decimal
,float
或integer
- Symfony Form Type 用于渲染此字段: MoneyType
渲染为:
1
<input type="number">
选项
setCurrency
格式化只读页面(index
和 detail
)中的字段值需要与金额关联的货币。如果货币是已知的,并且对于字段的所有值都相同,请使用此选项(否则,请使用 setCurrencyPropertyPath
选项)。
方法参数必须是有效的 ISO 4217 标准货币代码
1 2
// e.g. 'INR' = 'Indian Rupee'
yield MoneyField('...')->setCurrency('INR');
setCurrencyPropertyPath
格式化只读页面(index
和 detail
)中的字段值需要与金额关联的货币。如果货币对于每个字段值都不同,您可能会将该货币代码(遵循 ISO 4217 标准)存储为实体的属性。
使用此选项告诉 EasyAdmin 哪个属性存储货币代码。方法参数是任何有效的 Symfony PropertyAccess 表达式
1 2 3
yield MoneyField('...')->setCurrencyPropertyPath('currency');
yield MoneyField('...')->setCurrencyPropertyPath('currencySymbol');
yield MoneyField('...')->setCurrencyPropertyPath('currency.code');
setNumDecimals
默认情况下,货币金额以 2 位小数格式显示。如果您想使用不同的小数位数格式化值,请使用此选项
1
yield MoneyField::new('...')->setNumDecimals(0);
setStoredAsCents
默认情况下,EasyAdmin 将货币金额存储为分。例如,“5 欧元”存储为整数 500
(5 x 100 分),“349.99 日元”存储为整数 34,999
。
虽然乍一看可能过于复杂,但这仍然是在数据库中存储货币金额的最推荐方式。这样做可以解决在使用浮点数或十进制数存储货币金额时会遇到的所有舍入问题。
提示
在 Symfony/PHP 应用程序中,您可以使用 Money PHP 库来处理货币金额从分到其他单位或从其他单位到分的转换。
如果您不以分为单位存储货币金额,请将此选项设置为 false
yield MoneyField::new('...')->setStoredAsCents(false);
注意
启用此选项后,divisor
会自动设置为 100
。但是,如果您已使用 setFormTypeOption('divisor', ...)
方法定义了自己的自定义除数,则将使用自定义除数。