优雅/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)。请参阅 许可文件 了解更多信息。