garak / money-bundle
使用 moneyphp/money 的单货币包
v1.3.1
2024-06-28 08:47 UTC
Requires
- php: ^8.1
- doctrine/dbal: ^3.2 || ^4.0
- moneyphp/money: ^3.0 || ^4.0
- symfony/config: ^5.4 || ^6.0 || ^7.0
- symfony/dependency-injection: ^5.4 || ^6.4 || ^7.0
- symfony/form: ^5.4 || ^6.4 || ^7.0
- symfony/http-kernel: ^5.4 || ^6.4 || ^7.0
- twig/twig: ^3.4
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.42
- phpunit/phpunit: ^10.5
README
该包的目的是非常简单:使用 moneyphp/money
库并使用单一货币。
典型用法是在你需要将货币金额映射到数据库字段时。你可以将 Money 对象嵌入到你的实体中,但这并不完美,因为 Doctrine 不支持可为空的嵌入对象。
此外,你可能希望在项目中使用单一货币,因此你不想为货币本身使用无用的列。
使用此包,你只需将 "money" 用作类型。你可以选择你的属性是否可为空(对于任何其他 Doctrine 映射,默认选项是不可为空的)。完成:你的属性将映射到 Money EUR 对象(下面介绍自定义选项)。
安装
执行 composer require garak/money-bundle
。
映射示例
<?php namespace App\Entity; use Money\Money; class Foo { public __construct( public int $id, public \DateTimeImmutable $date, public ?string $notes, public Money $payment, ) { } }
<?xml version="1.0" encoding="utf-8"?> <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://doctrine-project.org/schemas/orm/doctrine-mapping https://doctrine-project.org/schemas/orm/doctrine-mapping.xsd" > <entity name="App\Entity\Foo"> <id name="id"/> <field name="date" type="date_immutable"/> <field name="notes" type="text" length="65535" nullable="true"/> <field name="payment" type="money"/> </entity> </doctrine-mapping>
表单类型扩展
此包为 Symfony MoneyType 配置了一个表单类型扩展,它执行以下两项操作:
- 将
divisor
的默认选项设置为100
(这应该是大多数货币应使用的值) - 将提交的值转换为整数,这是
moneyphp/money
期望的格式
要使用此扩展,你无需做任何事情,它将自动应用。
Twig 扩展
此包公开了一个名为 "money" 的 Twig 过滤器。它用于格式化货币属性的值。
示例
{# if the value in the database is 5099, this will display "€50,99" #} {{ foo.payment|money }}
自定义
你可以使用除 EUR 之外的其他货币。此外,你可以自定义 Twig 扩展使用的分隔符,并将符号放在金额之后。
money: currency: CHF # default "EUR" decimal: "." # default "," thousands: "," # default "." after: true # default false