finller/laravel-money

在您的 Laravel 应用中使用 Brick/Money

v2.0.1 2024-08-28 13:37 UTC

README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

轻松在 Laravel 应用中使用 Brick/Money。

功能

  • MoneyCast: 将模型属性转换为 Brick\Money\Money
  • MoneyParse: 将字符串和其他类型解析为 Brick\Money\Money
  • ValidMoney: Money 验证规则

升级到 V2

破坏性更改

命名空间已更新:从 Finller\Money 更新到 Elegantly\Money。您只需进行简单的搜索+替换即可。

安装

您可以通过 Composer 安装此包

composer require elegantly/laravel-money

您可以使用以下命令发布配置文件

php artisan vendor:publish --tag="money-config"

这是已发布的配置文件的内容

return [
    'default_currency' => 'USD',
];

用法

使用列作为货币进行转换(推荐)

如果您将货币存储在表列中,与金额值一起,您可以指定列名如下

use Elegantly\MoneyCast;

/**
 * @property ?Money $price
 * @property ?string $currency
 **/
class Invoice extends Model {

    protected $casts = [
        'price' => MoneyCast::class . ':currency'
    ];

}

使用定义的货币进行转换

您可以使用货币代码而不是列名将您的货币转换为特定货币。

use Elegantly\MoneyCast;

/**
 * @property ?Money $price
 * @property ?Money $cost
 **/
class Invoice extends Model {

    protected $casts = [
        'cost' => MoneyCast::class . ':EUR',
        'price' => MoneyCast::class . ':USD'
    ];

}

将值解析为货币实例

您可以使用 MoneyParser 将任何字符串/int/float 解析为货币实例。

以下是一些预期的行为示例

use Elegantly\Money\MoneyParser;

MoneyParser::parse(null, 'EUR'); // null

MoneyParser::parse(110, 'EUR'); // 110.00€
MoneyParser::parse(100.10, 'EUR'); // 100.10€

MoneyParser::parse('', 'EUR'); // null
MoneyParser::parse('1', 'EUR'); // 1.00€
MoneyParser::parse('100.10', 'EUR'); // 100.10€

验证规则

在 Livewire 中使用 ValidMoney

namespace App\Livewire;

use Elegantly\Money\Rules\ValidMoney;
use Illuminate\Foundation\Http\FormRequest;

class CustomComponent extends Component
{
    #[Validate([
        new ValidMoney(nullable: false, min: 0, max: 100)
    ])]
    public ?int $price = null;
}

在表单请求中使用 ValidMoney

namespace App\Http\Requests;

use Elegantly\Money\Rules\ValidMoney;
use Illuminate\Foundation\Http\FormRequest;

class CustomFormRequest extends FormRequest
{
    public function rules()
    {
        return [
            'price' => [
                new ValidMoney(
                    nullable: false,
                    min: 0,
                    max: 100
                )
            ],
        ];
    }
}

测试

composer test

变更日志

有关最近更改的更多信息,请参阅 CHANGELOG

贡献

有关详细信息,请参阅 CONTRIBUTING

安全漏洞

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

鸣谢

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件