akaunting/money

此包已被废弃且不再维护。作者建议使用 akaunting/laravel-money 包。

Laravel 的货币格式化和转换包

5.2.1 2024-07-23 15:01 UTC

README

Downloads Tests StyleCI License

本包旨在为 Laravel 项目提供轻松且强大的货币值格式化和转换工具。

为什么不使用 moneyphp 包呢?

因为它使用 intl 扩展进行数字格式化。intl 扩展默认不在 PHP 安装中,且可能在不同的服务器上产生 不同的结果

入门

1. 安装

运行以下命令

composer require akaunting/laravel-money

2. 发布

发布配置文件。

php artisan vendor:publish --tag=money

3. 配置

您可以通过 config/money.php 文件更改应用程序的货币信息

用法

use Akaunting\Money\Currency;
use Akaunting\Money\Money;

echo Money::USD(500); // '$5.00' unconverted
echo new Money(500, new Currency('USD')); // '$5.00' unconverted
echo Money::USD(500, true); // '$500.00' converted
echo new Money(500, new Currency('USD'), true); // '$500.00' converted

高级

$m1 = Money::USD(500);
$m2 = Money::EUR(500);

$m1->getCurrency();
$m1->isSameCurrency($m2);
$m1->compare($m2);
$m1->equals($m2);
$m1->greaterThan($m2);
$m1->greaterThanOrEqual($m2);
$m1->lessThan($m2);
$m1->lessThanOrEqual($m2);
$m1->convert(Currency::GBP(), 3.5);
$m1->add($m2);
$m1->subtract($m2);
$m1->multiply(2);
$m1->divide(2);
$m1->allocate([1, 1, 1]);
$m1->isZero();
$m1->isPositive();
$m1->isNegative();
$m1->format();

辅助函数

money(500)
money(500, 'USD')
currency('USD')

Blade 指令

@money(500)
@money(500, 'USD')
@currency('USD')

Blade 组件

与指令相同,还有一个 blade 组件,您可以在视图中创建货币和货币单位。

<x-money amount="500" />
or
<x-money amount="500" currency="USD" />
or
<x-money amount="500" currency="USD" convert />

<x-currency currency="USD" />

此包实现了 Laravel 的 Macroable 特性,允许在 MoneyCurrency 上使用宏和混入。

示例用法

use Akaunting\Money\Currency;
use Akaunting\Money\Money;

Money::macro(
    'absolute',
    fn () => $this->isPositive() ? $this : $this->multiply(-1)
);

$money = Money::USD(1000)->multiply(-1);

$absolute = $money->absolute();

宏也可以静态调用

use Akaunting\Money\Currency;
use Akaunting\Money\Money;

Money::macro('zero', fn (?string $currency = null) => new Money(0, new Currency($currency ?? 'GBP')));

$money = Money::zero();

混入

除了宏之外,还支持混入。这允许将其他类的函数合并到 Money 或 Currency 类中。

定义混入类

use Akaunting\Money\Money;

class CustomMoney 
{
    public function absolute(): Money
    {
        return $this->isPositive() ? $this : $this->multiply(-1);
    }
    
    public static function zero(?string $currency = null): Money
    {
        return new Money(0, new Currency($currency ?? 'GBP'));
    }
}

通过传递类的实例来注册混入

Money::mixin(new CustomMoney);

自定义类的函数将可用

$money = Money::USD(1000)->multiply(-1);
$absolute = $money->absolute();

// Static methods via mixins are supported too:
$money = Money::zero();

更新日志

请参阅 发行版 以获取有关最近更改的更多信息。

贡献

欢迎提交拉取请求。您必须遵循 PSR 编码标准。

安全

请审查 我们的安全策略 以了解如何报告安全漏洞。

鸣谢

许可

MIT 许可证 (MIT)。请参阅 LICENSE 以获取更多信息。