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获取更多信息。