garak / money-bundle

使用 moneyphp/money 的单货币包

安装: 215

依赖项: 0

建议者: 0

安全: 0

星级: 0

关注者: 2

分支: 0

开放问题: 0

类型:symfony-bundle

v1.3.1 2024-06-28 08:47 UTC

This package is auto-updated.

Last update: 2024-08-28 09:12:40 UTC


README

Total Downloads Build Maintainability Test Coverage

该包的目的是非常简单:使用 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